AT91SAM7S MCU点亮LED灯

初始化并行输入输出(PIO)控制器

  1. PMC(电源管理控制器)打开 外围时钟. 如果要将IO引脚配置为输出,起始连时钟都可以不打开。如果配置为输入或者要求中断的化,时钟还是必须打开的
  2. 在 AIC里配置 中断源 (可选操作)
  3. 将对应的PIO引脚,配置为输出(output)
    (1) 往PER(PIO Enable Register)寄存器里写入对应的管脚号。
    (2) PIO的方向是由 OER(Output Enable Register)和ODR(Output Disable Regiser)两个寄存器控制的。
  4.  控制引脚电平的高低:通过写 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;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注