LPC2294串口程序求助
时间:10-02
整理:3721RD
点击:
LPC2294的P0.1和P0.0作为串口接收单片机发来的按键值keynum(0x01,0x02......),不知道程序哪里有问题,1)单片机发出来的数据用串口调试助手可以收到,为什么ARM收不到,2)还有就是U0FCR 设置为触发点为1个字节对不对,按键值在单片机定义的是char型?3)单片机发给串口调试助手比如10是0A,11是0B,那么ARM接收到也是这样吗?由于才接触ARM希望指导下。
void UART0_Ini(uint32 baud)
{
uint32 bak;
PINSEL0 = PINSEL0 | 0x00000005; //使用P0.0-TXD(UART0)和P0.1-RXT(UART0)
U0LCR = 0x83; // DLAB位置1
bak = (Fpclk >> 4) / baud;
U0DLM = bak >> 8;
U0DLL = bak&0xff;
U0LCR = 0x03; //字长选择8bit,清DLAB,无奇偶校验;
U0FCR = 0x01; // 使能FIFO,设置触发点为1字节,并复位RXFIFO
U0IER = 0x01; // 允许RBR中断,即接收中断
//设置中断允许
VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
VICVectCntl1 = 0x26; // UART0中断通道分配到IRQ slot 1,即优先级second
VICVectAddr1 = (uint32)IRQ_UART0; // 设置UART1向量地址
VICIntEnable = (1<<6); // 使能UART0中断
}
void __irq IRQ_UART0(void)
{
uint8 i;
uart0=1;
if( (U0IIR&0x0F)==0x04)
{//接收字节数达到接收FIFO中的出发点(RDA)中断
keynum = U0RBR;
}
else
{//接收超时(CTI)中断
U0FCR=0XC3; //bit2 = 1,清空UARTn接收FIFO,并使指针逻辑复位
}
VICVectAddr = 0x00; // 中断处理结束
}
void UART0_Ini(uint32 baud)
{
uint32 bak;
PINSEL0 = PINSEL0 | 0x00000005; //使用P0.0-TXD(UART0)和P0.1-RXT(UART0)
U0LCR = 0x83; // DLAB位置1
bak = (Fpclk >> 4) / baud;
U0DLM = bak >> 8;
U0DLL = bak&0xff;
U0LCR = 0x03; //字长选择8bit,清DLAB,无奇偶校验;
U0FCR = 0x01; // 使能FIFO,设置触发点为1字节,并复位RXFIFO
U0IER = 0x01; // 允许RBR中断,即接收中断
//设置中断允许
VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
VICVectCntl1 = 0x26; // UART0中断通道分配到IRQ slot 1,即优先级second
VICVectAddr1 = (uint32)IRQ_UART0; // 设置UART1向量地址
VICIntEnable = (1<<6); // 使能UART0中断
}
void __irq IRQ_UART0(void)
{
uint8 i;
uart0=1;
if( (U0IIR&0x0F)==0x04)
{//接收字节数达到接收FIFO中的出发点(RDA)中断
keynum = U0RBR;
}
else
{//接收超时(CTI)中断
U0FCR=0XC3; //bit2 = 1,清空UARTn接收FIFO,并使指针逻辑复位
}
VICVectAddr = 0x00; // 中断处理结束
}
band为9600,单片机也是9600
从你的描述上看,问题出在LPC2294上,解决办法:1、检查UART初始化是否正确(参考手册,例程)2、让LPC2294这边串口接收到什么原样发送出去,通过串口助手看数据是否正确3、还可以在线调试,串口中断里设置断点,观察下变量是否正确
你好,不知道你的问题解决了吗。我最近刚刚入手lpc2194,却苦于一直找不到库函数或示例程序,您那能把你用的程序或库函数给我发一份吗?
不胜感激!
qq:597436250