微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Cortex-M3 (NXP LPC1788)之UART用法

Cortex-M3 (NXP LPC1788)之UART用法

时间:11-19 来源:互联网 点击:

  1. )(0x40098000))
  2. #definerU2RBR(*(volatileunsigned*)(0x40098000))
  3. #definerU2FCR(*(volatileunsigned*)(0x40098008))
  4. #definerU2IIR(*(volatileunsigned*)(0x40098008))
  5. #definerU2LSR(*(volatileunsigned*)(0x40098014))
  6. #definerU2IER(*(volatileunsigned*)(0x40098004))
  7. #definerU2ACR(*(volatileunsigned*)(0x40098020))
  8. voidUART2_IRQHandler()
  9. {
  10. unsignedintintId;
  11. chartmp_char;
  12. intId=rU2IIR&0xf;
  13. rU2THR=intId;
  14. if(intId==0xc||intId==0x4)//RDA或者CTI中断
  15. {
  16. rU2LCR&=~(0x1<7);//DLAB=0
  17. tmp_char=rU2RBR&0xff;
  18. rU2THR=tmp_char;
  19. }
  20. intId=rU2IIR&0xf;
  21. rU2THR=intId;
  22. if(tmp_char==0xa5)
  23. rFIO1PIN|=(1<18);
  24. elseif(tmp_char==0x5a)
  25. rFIO1PIN&=~(1<18);
  26. }
  27. voidSystemInit()
  28. {
  29. rSCS&=~(0x1<4);//频率12M
  30. rSCS|=(0x1<5);//使能主振荡器
  31. while(0==(rSCS&(0x1<6)));//等待主振荡器稳定
  32. rCLKSRCSEL=0x1;
  33. rPLL0CFG=0x9;//配置CCLK=120M
  34. rPLL0CON=0x01;
  35. rPLL0FEED=0xAA;
  36. rPLL0FEED=0x55;
  37. while(0==(rPLL0STAT&(0x1<10)));
  38. rCCLKSEL=(0x1|(0x1<8));
  39. rPCLKSEL=0x2;//配置PCLK=60M
  40. rCLKOUTCFG=0x0|(0xb<4)|(0x1<8);
  41. }
  42. voidInit_Uart2()
  43. {
  44. rPCONP|=0x1<24;//使能UART2功率控制
  45. rIOCON_P0_10=(rIOCON_P0_10&(~0x7))|0x1;//P0.10P0.11做UART2的发送和接收管脚
  46. rIOCON_P0_11=(rIOCON_P0_11&(~0x7))|0x1;
  47. rU2LCR|=0x1<7;//DLAB=1
  48. rU2FDR=1|2<4;//波特率设置115200
  49. rU2DLM=0;
  50. rU2DLL=22;
  51. rU2LCR&=~(0x1<7);//DLAB=0
  52. rU2LCR|=0x3;//8位数据位,无校验,1个停止位
  53. rU2TER|=0x1<7;//使能串口2的发送
  54. rU2IER|=0x1;//使能串口2的接收中断
  55. rU2FCR|=0x1;//复位FIFO,设置接收1个字符触发中断
  56. rU2FCR|=0x1<1|0x1<2;
  57. rISER0|=0x1<7;//使能串口2中断
  58. }
  59. voidUart2SendC(charc)
  60. {
  61. rU2THR=c&0xff;
  62. while(!(rU2LSR&(0x1<5)));//等待rU2THR中的数据发送完成,防止数据溢出
  63. }
  64. voidUart2SendS(char*s)
  65. {
  66. while(*s)
  67. {
  68. Uart2SendC(*s);
  69. s++;
  70. }
  71. }
  72. intmain(void)
  73. {
  74. charstr[]={"\n\r1,DisplaytheU2IIR[3:0]+Data+U2IIR[3:0]\n\r2,Send0x5a--->TurnontheLED\n\r3,Send0xa5--->TurnofftheLED\n\r"};
  75. rFIO1DIR|=(1<18);//GPIO1.18->OUTPUT
  76. Init_Uart2();
  77. Uart2SendS(str);
  78. while(1);
  79. }

运行结果如下图所示


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top