ARM7 BEEP程序剖析
#include “config.h”
#define BEEP 1 << 7 // P0.7操控蜂鸣器,低电平蜂鸣
包括一个config.h的头文件,里边主要是界说了数据类型的时钟频率等。
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly–)
for (i=0; i<50000; i );
}
写了一个延时函数。
主函数如下:
int main (void)
{
PINSEL0 = 0x00000000; // 设置管脚衔接GPIO
IO0DIR = BEEP; // 设置BEEP操控口为输出
while (1)
{
IO0SET = BEEP; // BEEP中止蜂鸣
DelayNS(50);
IO0CLR = BEEP; // BEEP 蜂鸣
DelayNS(50);
}
return 0;
}
首要咱们剖析下管束衔接模块包括的3个寄存器PINSEL0~PINSEL2。
PINSEL0是32位寄存器,每两位操控一个引脚,来确认每一个引脚的功用,所以每一个引脚的功用复用最多也只要4种。PINSEL0操控P00~P15这16个引脚。
PINSEL1操控着P16~P31这16个引脚。
PINSEL2特别一些,主要是用于操控P1口关于PINSEL2的拜访要运用“读-修正-写”的办法。
PINSEL2的0、1两位是保存位,用户软件不要向其写1.
2位,当为0时表明P1.13~P1.26用作GPIO,为1时用做、作调试端口。
3位,为0时表明P1.25~P1.16用作GPIO,为1时表明用于盯梢端口。
只要当管脚挑选GPIO功用时,IO0DIR/IO1DIR寄存器的方向操控位才有用。其它功用的方向都是自动操控的。
PINSEL0 = 0x00000000;这儿便是当P00~P15都设制成为了GPIO功用。
IO0DIR = BEEP;表明P07设为输出。
while (1)
{
IO0SET = BEEP; // BEEP中止蜂鸣
DelayNS(50);
IO0CLR = BEEP; // BEEP 蜂鸣
DelayNS(50);
}
IO0CLR功用是对位清零,IO0SET功用是对方位1.
这儿便是让蜂鸣器鸣叫了。