LPC21XX 串口的接收和发送中断(MDK)
/*============================================================
LPC21XX 串口使用接收发送中断
==============================================================
本例程的CCLK=60M.
晶振采用12M
倍频系数为:5
分频系数为:2
以上设置在Startup.s中设置
*/
#include
#include "Config.H"
#define UART_BAUD(baud) (unsigned int)(Fpclk/(baud * 16))
uint8 buffer[100];
uint8 SendLen;//发送数据长度
uint8 SendCount;//数据发送计数
uint8 SendData[256];
void Init_Uart0(unsigned int Baud)
{
/* initialize the serial interface */
PINSEL0 = 0x00000005; /* Enable RxD0 and TxD0 */
U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
U0DLM=(unsigned char)(Baud>>8);
U0DLL = (unsigned char)Baud;
U0LCR = 0x03; /* DLAB = 0 */
}
void delay (unsigned int i)
{ /* Delay function */
unsigned int n;
while(i>1)
{
for(n=65535;n>1;n--);
i--;
}
}
//发送普通二进制数据
void Sent_Byte(uint8 *da,uint8 len)
{
uint8 i;
for(i=0;i SendData[i]=da[i]; SendLen=len; U0THR = SendData[0]; SendCount=1; } // 发送字符 void Sent_Str(unsigned char const *str) { uint8 i=0; while(1) { SendData[i]=*str; if( *str == /0 ) break; str++; i++; } SendLen=i; U0THR = SendData[0]; SendCount=1; } //串口中断 void __irq uart_int() { uint8 i; if((U0IIR&0x0f)==0x02) //发送中断 { if(SendCount!=SendLen) { U0THR = SendData[SendCount]; SendCount++; } } // 接收中断 else if(((U0IIR & 0x0F) == 0x0C)||((U0IIR & 0x0F) == 0x04)) { // 如果中断是由FIFO数据达到触发点引起的 for (i=0; i<14; i++) { buffer[i] = U0RBR; } Sent_Byte(buffer,8); } /* else if ((U0IIR & 0x0F) == 0x0C) { // 如果中断是由FIFO超时引起的 buffer[0] = U0RBR; } */ VICVectAddr = 0; // 清中断标志,不是外部中断不必复位EXTINT } int main(void) { Init_Uart0(UART_BAUD(115200)); U0FCR = 0xc1; // 开启UART FIFO模式 1个字符触发0x01,4-0x41,8-0x81,14-0xc1 U0IER = 0x03; // 使能RBR中断,禁止THRE Rx线状态中断(DLAB=0时) VICIntSelect = 0; // 选择所有中断为IRQ中断 VICVectCntl0 = 0x20 | 0x06; // slot0 对应中断源为UART VICVectAddr0 = (uint32)uart_int; // slot0 中断服务程序 VICIntEnable = 1 < 0x06; // 使能UART中断源 Sent_Str("http://blog.csdn.net/cy757//n") ; for(;;) { delay(200); } }
LPC21XX串口接收发送中断MD 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)