arm gpio设置
(2010-09-01 20:12:51)
标签:
杂谈 |
分类: linux学习 |
——————顺便搜了点东西,很好————————
LPC21XX系列 ARM编程要点:
2.
3.
4.
5.
6.
a)
b)
PINSEL0=PINSEL0
& 0xFFFFFFFC
c)
PINSEL0=PINSEL0
& 0xFFFFFFFC
d)
PINSEL0=PINSEL0
& 0xFFFF0000
e)
PINSEL0=PINSEL0 &
0xFFFF0000
7.
在处理IRQ中断过程中,IRQ中断默认是被禁止的;
在启动代码中默认是关闭IRQ和FIQ的,如果要使用需要设置CPSR寄存器的I位或F位,这需要在特权模式下处理,最简单的方法是在启动代码中设置;8.
SPI控制寄存器用来控制SPI时钟,通过SPI状态寄存器的SPIF位可查询数据传输是否完成,SPI数据寄存器用于提供发送和接收的数据字节。
SPI可设置成主机模式或者从机模式。处于主机模式时,SPI时钟寄存器用来控制时钟频率,该寄存器必须在数据传输之前设定。处于从机模式时,该寄存器无效。当设计为从机模式时,其对应的SSEL被选中时才有效。当设计为主机模式时,对应的SSEL端口需接上拉电阻(置高)。
———————————知识oo知识———————————
0,1是对应P0和P1口的32个脚的控制
其中下面的指令对应位为1时有效!!在ADS编程里必须使用大写有效!!
PINSEL是对管脚定义gpio(标准)
IOPIN是读管脚值
IOSET是置高电平
IODIR是设置输出和输入的
IOCLR是置低电平
————————心得————————1,#define deep (1<<7)
解释:定义deep:(1<<7)即 deep=0X00000080 这样一个端口的2进制地址就可以了,再用IO*** PINSEL等命令时就方便了。
PINSEL=DEEP;
IODIR=DEEP;
IOSET=DEEP;
2,while(1){**}
3,C中没有去过多的关注寄存器,储存器的使用和状态。所以会觉得稍稍的不爽。不过在ARM中加入 C与汇编的交互使用,下一步要学习下。
———————今天使用的源程序———————
#include "config.h"
# define deep (1<<7)
#define key1(1<<16)
VOID WAITKEY(VOID)
{
UINT32 I;
WHILE (1)
{
WHILE((IO0PIN&KEY1)!=0)
FOR(I=0;I<50000;I++);
WHILE((IO0PIN&KEY1)==0)
BREAK;
}
WHILE((IO0PIN&KEY1)==0);//等待key1放开,否则一直循环。
}
VOID DELAYNS(UINT32 DLY)
{UINT32 DLY;
FOR(;DLY>0;DLY--)
FOR(I=0;I<50000;I++);
}
INT MAIN(VOID)
{PINSEL0=0X00000000;
PINSEL1=0X00000000;
IO0DIR=BEEP;
IOOSET=KEY1;
WHILE(1)
{WAITKEY();
IO0CLR=BEEP;
DELAYNS(20);
IO0SET=BEEP;
DELAYNS(30);
IO0CLR=BEEP;
DELAYNS(20);
IO0SET=BEEP;
DELAYNS(30);
}
}

加载中…