Chinaunix首页 | 论坛 | 博客
  • 博客访问: 493258
  • 博文数量: 78
  • 博客积分: 5131
  • 博客等级: 大校
  • 技术积分: 1468
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-17 16:20
文章分类
文章存档

2012年(1)

2011年(29)

2010年(6)

2009年(24)

2008年(18)

我的朋友

分类: LINUX

2011-01-05 11:50:14

AT91SAM7S256的IO

  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 AB选择状态寄存器

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

阅读(2327) | 评论(0) | 转发(0) |
0

上一篇:bne 1b什么意思

下一篇:移植uboot到S3C2410

给主人留下些什么吧!~~