初始化并行输入输出(PIO)控制器
- PMC(电源管理控制器)打开 外围时钟. 如果要将IO引脚配置为输出,起始连时钟都可以不打开。如果配置为输入或者要求中断的化,时钟还是必须打开的
- 在 AIC里配置 中断源 (可选操作)
- 将对应的PIO引脚,配置为输出(output)
(1) 往PER(PIO Enable Register)寄存器里写入对应的管脚号。
(2) PIO的方向是由 OER(Output Enable Register)和ODR(Output Disable Regiser)两个寄存器控制的。 - 控制引脚电平的高低:通过写 PIO_SODR ( 置位输出数据寄存器 ) 与 PIO_CODR ( 清零输出数据寄存器 ),可将 I/O 改为电平驱动。写操作对 PIO_ODSR ( 输出数据状态寄存器 ) 分别置位与清零,表示在 I/O 线上的数据驱动。
注意,在每个PIO引脚,都有个独立的内部上拉电阻. 这些上拉电阻默认都是启用的。因为它们在点亮LED上没有用。所以,应该被关掉,以减少电量消耗。可以通过PUDR(Pull Up Disable Register)来关掉。
#include "AT91SAM7S256.h" #define LED_A (1U<<0) // PA0, pin 48 #define LED_B (1U<<1) // PA1, pin 47 /* Configure the pins as outputs */ AT91C_BASE_PIOA->PIO_OER = (LED_A | LED_B); /* Enable PIOC control on the pins*/ AT91C_BASE_PIOA->PIO_PER = (LED_A | LED_B); /* Disable pull-ups */ AT91C_BASE_PIOA->PIO_PPUDR = (LED_A | LED_B); /* Turn LED on, high level */ AT91C_BASE_PIOA->PIO_SODR = LED_A; /* Turn LED off, low level */ AT91C_BASE_PIOA->PIO_CODR = LED_A;