LPC2119调试说明Word格式文档下载.docx
《LPC2119调试说明Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《LPC2119调试说明Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
FIQ
二、系统控制模块
1.外部中断输入
✧由于外部中断管脚输入内部没有上拉电阻,所以管脚必须外接一上拉电阻,以确保管脚不会悬空。
✧对外部中断方式寄存器(EXTMODE)及外部中断极性寄存器(EXTPOLAR)设置时会影响VPBDIV寄存器,可用以下方法解决:
1)VPBDIV写入0x0
2)写入想要设置的值到EXTMODE或EXTPOLAR
3)VPBDIV写入与2)中相同的值
4)VPBDIV写入原来的值
举例:
设置EXTMODE
VPBDIV=0x0//VPBDIV写入0
EXTMODE=0x1//EXTMODE设置为1
VPBDIV=0x1//VPBDIV写入与EXTMODE一样的值
VPBDIV=0x1//VPBDIV恢复原来的值0x1若原来的值为0则写0x0
设置EXTPOLAR与EXTMODE一致,只要把第二行代码改为EXTPOLAR=0x1即可
2.存储器映射控制
MAMMAP用于改变地址从0x00000000开始的中断向量的映射
MAMMAP=0x2(用户RAM模式)表示产生中断时,从0x00000008的读数/取指是对0x40000008单元进行操作;
MAMMAP=0x1(用户FLASH模式)表示产生中断时,从0x00000008的读数/取指是对片内FLASH单元的0x00000008进行操作;
MAMMAP=0x2(BOOT装载程序模式)表示产生中断时,从0x00000008的读数/取指是对0x7fffe008单元进行操作。
3.PLL
PLL频率计算方法
Fosc:
晶振频率;
Fcco:
PLL电流控制震荡器的频率;
Fcclk:
PLL输出频率(即CPU的时钟频率)
M:
PLLCFG寄存器中MSEL位的倍频器值;
P:
PLLCFG寄存器中PSEL位的分频器值。
Fcclk=M×
Fosc或Fcclk=Fcco/(2×
P)
PLL输入和设定必须满足以下条件:
✧Fosc为10~25MHx
✧Fcclk为10MHz~Fmax(LPC2119最大允许频率)
✧Fcco为156~320MHz
Fosc=12MHz
PLLCFG_bit.MSEL=3;
//M=3,P=1PLL输出频率=CCLK=48Mhz
PLLCFG_bit.PSEL=1;
PLLFEED=0xAA;
PLLFEED=0x55;
PLLCON_bit.PLLE=1;
//EnablethePLL
while(!
(PLLSTAT&
PLOCK));
//WaitforPLLtolock
PLLCON_bit.PLLE=1;
PLLCON_bit.PLLC=1;
PLLFEED=0xAA;
PLLFEED=0x55;
4.功率控制
PCON=0;
//功率控制
PCONP_bit.PCURT1=0;
//关闭UART1功能
PCONP_bit.PCPWM0=0;
//关闭PWM0功能
PCONP_bit.PCRTC=0;
//关闭RTC功能
5.复位
P0.14(41脚)必须上拉一10K电阻使之上电时保持高点平,否则上电时会因为
为低电平而强制引导BOOTBLOCK的操作。
6.VPB分频器
VPB分频器决定处理器时钟(cclk)与外设器件所使用的时钟(pclk)之间的关系。
VPBDIV1:
0VPB时钟速率如下:
00:
VPB总线时钟为处理器时钟的1/4。
01:
VPB总线时钟与处理器时钟相同。
10:
VPB总线时钟为处理器时钟的1/2。
11:
保留。
将该值写入VPBDIV寄存器无效(保留原来的设定)。
三、存储器加速模块
MAMCR_bit.MODECTRL=2;
//存储器加速模块功能完全使能
MAMTIM_bit.CYCLES=3;
//因为Fcclk=48M大于40M,所以MAMTIM的CYCLES取3。
四、向量中断控制器
设置中断响应程序的步骤如下:
#defineVIC_EINT2_bit(1<
<
VIC_EINT2)
__disable_interrupt();
VICIntEnClear=0xffffffff;
//中断使能寄存器所有位清0
VICDefVectAddr=(U16)&
DefDummyInterrupt;
//默认向量地址寄存器的值等于
//DefDummyInterrupt
VICIntSelect&
=~VIC_EINT2_bit;
//设置IRQ中断
VICVectAddr0=(U16)&
eint2;
//中断服务程序地址
VICVectCntl0=0x20|VIC_EINT2;
//IRQ使能,并给外部中断2分配一独立的编号
VICIntEnable=VIC_EINT2_bit;
//使能外部中断2
//若还需要设置别的中断可依次设置VICVectAddr1~15,VICVectCntl1~15
__enable_interrupt();
以下是中断源的VIC通道
五、引脚连接模块
PINSEL0控制P0.0~P0.15的管脚连接功能,PINSEL1控制P0.16!
P0.31的管脚连接功能,PINSEL2则按照下表来选择管脚连接功能:
只有当管脚选择GPIO功能时,IO0DIR/IO1DIR寄存器的方向控制位才有效。
六、GPIO
单个位的方向控制
单独控制输出的置位和清零
所有I/O口在复位后默认为输入
P0口作为GPIO时如果选择输入则应外接一上拉电阻,因为P0口无内置上拉电阻;
P1口则有内置上拉电阻,作为输入时不需要外接上拉电阻。
IODIR在初始化时设置,先设置好引脚连接为GPIO功能后就可以设置方向寄存器,如果引脚设置为输出,则在需要设置引脚状态时根据需要的状态分别设置I0SET和IOCLR,使相应引脚输出高点平或低电平;
可读IOPIN寄存器来确定当前引脚的状态。
七、UART0
寄存器映射如下表:
UART0初始化举例:
U16divisor=pclk/(16*baud);
//计算除数锁存值
U0LCR=0x83;
//除数锁存访问允许,禁止间隔发送,奇数,禁止奇偶产生及校验,
//1个停止位,8位字符长度。
U0DLL=LSB(divisor);
//设置除数锁存低8位
U0DLM=MSB(divisor);
//设置除数锁存高8位
U0LCR=0x03;
//正常工作
U0IER_bit.RDAIE=1;
//打开接收中断
发送数据举例:
while(U0LSR_bit.THRE==0);
//如果发送保持寄存器不为空则等待,只到空闲为止
U0THR=data;
//发送数据
使用中断接收数据时,进入中断后必须先读中断标志寄存器,才能读数据。
读中断标志寄存器低4位代码定义如下表:
即U0IIR低4位为4就是接收中断,为2就是发送中断。
八、I2C总线
I2C的SDA和SCL引脚必须接上拉电阻,否则无法使用。
初始化如下:
I2SCLH=I2SCLL=I2CCLK;
I2CCLK=pclk/(2*fi2c),如果需要位速率为100K,pclk=12M,则I2CCLK=60
下边列出I2C总线用到的子程序:
#defineAT24C01A0xA0/*定义E2PROM的地址*/
/*;
;
名称:
i2c_start
功能:
I2C发送起始信号启动总线传输
入口参数:
出口参数:
0表示正常1表示故障
*/
U8i2c_start()
{
U16wait_time=10000;
I2CONCLR=0x2C;
/*清除起始标志位STA中断标志位SI应答标志位AA*/
I2CONSET=0x40;
/*BIT6=1使能I2C总线*/
I2CONSET=0x60;
/*启动I2C总线即发送起始标志*/
while((I2CONSET&
0x08)==0);
/*等待SI为1此处应避免死循环*/
return
(1);
}
sendbyte
发送一字节数据
data_buf发送的数据
无
voidsendbyte(U8data_buf)
I2DAT=data_buf;
/*发送数据*/
I2CONCLR=0x28;
/*清除起始标志STA和中断标志SI*/
/*等待SI为1*/
return;
rcvbyte_na
接收I2C总线上一字节数据并发送非应答位一般在最后接收到的字节时使用
I2DAT
U8rcvbyte_na()
/*设置为发送非应答位即AA=0同时清SI中断标志*/
return(I2DAT);
/*读取接收到的数据利用函数返回*/
rcvbyte_a
接收I2C总线上一字节数据并发送应答位
U8rcvbyte_a()
I2CONSET=0x04;
/*设置AA=1即发送应答位*/
/*清SI标志*/
w