原创 AT91SAM7S256的IO

2009-11-10 16:58 3105 3 5 分类: 工程师职场
 

  AT91SAM7S256IO的编程与LPCIO口编程有很大的类似,但是,在其头文件中都将IO封装成结构体,虽然看起来不是很容易,却利于编程。具体定义参见AT91SAM7S256.h。


  其中,IO的寄存器的定义如下:


typedef struct _AT91S_PIO {


AT91_REG         PIO_PER;         // PIO Enable Register   IO使能寄存器


AT91_REG         PIO_PDR;         // PIO Disable Register IO禁用寄存器


AT91_REG         PIO_PSR;         // PIO Status Register IO状态寄存器


AT91_REG         Reserved0[1];         //


AT91_REG         PIO_OER;         // Output Enable Register IO输出使能寄存器


AT91_REG         PIO_ODR;         // Output Disable Registerr IO禁止输出寄存器


AT91_REG         PIO_OSR;         // Output Status Register IO输出状态寄存器


AT91_REG         Reserved1[1];         //


AT91_REG         PIO_IFER;         // Input Filter Enable Register IO输入滤波器使能寄存器


AT91_REG         PIO_IFDR;         // Input Filter Disable Register IO输入滤波器禁止寄存器


AT91_REG         PIO_IFSR;         // Input Filter Status Register IO输入滤波器状态寄存器


AT91_REG         Reserved2[1];         //


AT91_REG         PIO_SODR;         // Set Output Data Register ,输出数据置位寄存器


AT91_REG         PIO_CODR;         // Clear Output Data Register ,输出数据清零寄存器


AT91_REG         PIO_ODSR;         // Output Data Status Register ,输出数据状态寄存器


AT91_REG         PIO_PDSR;         // Pin Data Status Register


AT91_REG         PIO_IER;         // Interrupt Enable Register,中断使能寄存器


AT91_REG         PIO_IDR;         // Interrupt Disable Register,中断禁止寄存器


AT91_REG         PIO_IMR;         // Interrupt Mask Register,中断屏蔽寄存器


AT91_REG         PIO_ISR;         // Interrupt Status Register,中断状态寄存器


AT91_REG         PIO_MDER;         // Multi-driver Enable Register


AT91_REG         PIO_MDDR;         // Multi-driver Disable Register


AT91_REG         PIO_MDSR;         // Multi-driver Status Register


AT91_REG         Reserved3[1];         //


AT91_REG         PIO_PPUDR;         // Pull-up Disable Register


AT91_REG         PIO_PPUER;         // Pull-up Enable Register


AT91_REG         PIO_PPUSR;         // Pull-up Status Register


AT91_REG         Reserved4[1];         //


AT91_REG         PIO_ASR;         // Select A Register


AT91_REG         PIO_BSR;         // Select B Register


AT91_REG         PIO_ABSR;         // AB Select Status Register


AT91_REG         Reserved5[9];         //


AT91_REG         PIO_OWER;         // Output Write Enable Register


AT91_REG         PIO_OWDR;         // Output Write Disable Register


AT91_REG         PIO_OWSR;         // Output Write Status Register


} AT91S_PIO, *AT91PS_PIO;


 


  IO口程序中主要程序解释如下:


AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;               // 定义PIOA端口


  其中,AT91PS_PIO软件API定义IO控制器,而AT91C_BASE_PIOAPIO控制器A在系统控制器映射中的起始地址


  外围的初始化中(system.C,首先,允许PIO时钟 p_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;    // 允许PIO时钟)。


  然后,对于需要输出数据的PIO采用的是先修改PIO_PERIO使能寄存器),然后,PIO_OERPIO输出使能寄存器),然后,把其输出置位使用PIO_SODR输出数据置位寄存器),清零使用的是PIO_CODR输出数据清零寄存器),将其中为1对应的IO口进行对应的操作。第一个程序中,使PA1口输出方波,即使PIO_SODRPA11,然后延时后,使PIO_CODR中的PA11


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

tongliana_437375974 2016-4-28 16:57

请问大侠, AT91SAM7S256晶振无输出,如何判别工作与否?

用户1371125 2011-4-26 09:24

读取输入怎么操作呢?
相关推荐阅读
用户232266 2009-12-02 16:49
交叉线实现两台电脑传文件
第一步:将两台笔记本的IP都设成因定IP(这个应该会设吧……还是简单说一下吧,打开控制面板——网络连接——选中“本地连接”点击右键——选择“属性”——选择“TCP/IP协议”——选择“使用下面的IP地...
用户232266 2009-11-30 20:18
C++中字符串与整型浮点型间的转换
atof(将字符串转换成浮点型数)  相关函数  atoi,atol,strtod,strtol,strtoul 表头文件  #include <stdlib.h> 定义函数  doubl...
用户232266 2009-11-24 16:49
fft的物理意义【转】
FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将...
用户232266 2009-11-14 09:50
C盘瘦身
1.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-再按“确定” 2.删除以下文件夹中的内容: C:\Documents and Settings\用户名\...
用户232266 2009-11-12 21:04
如果让我重新读次研究生--王泛森院士
一、研究生与大学生的区别    首先跟大家说明一下研究生和大学生的区别。大学生基本上是来接受学问、接受知识的,然而不管是对于硕士时期或是博士时期的研究而言,都应该准备要开始制造新的知识,我们在美国得到...
我要评论
2
3
关闭 站长推荐上一条 /4 下一条