具体过程:
1.设置好uart控制寄存器,自己定义收发缓冲区,以及收发函数,一个两个串口无所谓
2.写好中断向量表,自己查查一下uart0,uart2,uart2的中断号,例如
void __irq IRQ_Handler(void)
{
switch(INTOFFSET)
{
case 28: //INT_UART0
Uart0_Int()
break
case 23: //INT_UART1
Uart1_Int()
break
case 15: //INT_UART2
Uart2_Int()
break
}
}
3.用公母线将arm与pc相连,打开pc的超级中断,将arm与pc的比特率设置为相同的就可以了。
清除接收中断预处理位,和USART_ClearFlag()函数功能是一样的,至于为什么要设置两个函数
可能是为了兼容其他系列,或者为以后升级预留使用
从字面上来理解,USART_ClearFlag()是清除标志位,标志位置1并不意味着产生中断。
而USART_ClearTPendingBit()则时清除中断预处理位,即产生了中断。
除了一些特殊的中断在进入中断时自动清除中断标志位,一般的中断在退出中断时都要手动清除中断标志位,以免重复进入中断。
一般情况下,如果没有设置DMA传输,是每次接收一个字节后就会产生一次中断。
U0IER=0x02 //使能THRE中断这句没使能接收中断吧,接收中断正常吗?
首先要知道,串口0只有一个中断入口,中断发生后,需要对中断标识寄存器进行判断以确定中断类型再进行相应处理。
如:
__irq void uart0()
{
if((U0IIR&0x0F)==0x02)
发送数据 //发送中断
if((U0IIR&0x0F)==0x04)
接收数据 //接收中断
.
.
.
VICVectAddr=0//中断结束
}
另外,实时性要求不是特别高的情况下,一般发送用查询方式即可。
/*
*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_UART0 (void)
{
uint8 i
if ((U0IIR &0x0F) == 0x04)
rcv_new = 1 // 设置接收到新的数据标志
for (i=0i<8i++)
{
rcv_buf[i] = U0RBR // 读取FIFO的数据,并清除中断
}
VICVectAddr = 0x00 // 中断处理结束
}
/*
*********************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口0发送1字节数据
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendByte (uint8 dat)
{
U0THR = dat// 要发送的数据
}
/*
*********************************************************************************************************
** 函数名称 :UART0_SendBuf()
** 函数功能 :向串口发送8字节数据
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendBuf (void)
{
uint8 i
for (i=0i<8i++)
UART0_SendByte(rcv_buf[i])
while ((U0LSR &0x20) == 0)// 等待数据发送完毕
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)