Main.c
上传用户:cchhkk2004
上传日期:2022-05-10
资源大小:78k
文件大小:5k
源码类别:

VxWorks

开发平台:

Others

  1. //--------------------------------------------------------------------------------
  2. #include <stdio.h>                /* prototype declarations for I/O functions */
  3. #include <LPC21xx.H>              /* LPC21xx definitions                      */
  4. #include "Main.h"
  5. //--------------------------------------------------------------------------------
  6. void UART0_Init (void)
  7. {
  8. UINT16 Fdiv;
  9. PINSEL0 = 0;
  10. PINSEL0 &= ~(3 < 0);
  11. PINSEL0 &= ~(3 < 2);
  12. PINSEL0 |= (0x01 < 0);
  13. PINSEL0 |= (0x01 < 2);
  14. U0LCR = 0x83;              // DLAB = 1,可设置波特率
  15. Fdiv = (Fpclk / 16)/ UART_BPS;            // 设置波特率
  16. U0DLM = Fdiv / 256;
  17. U0DLL = Fdiv % 256;
  18. U0LCR = 0x03;
  19. }
  20. //--------------------------------------------------------------------------------
  21. void UART1_Init (void)
  22. {
  23. #if 0
  24. UINT16 Fdiv;
  25. PINSEL0 = 0;
  26. PINSEL0 &= ~(3 < 16);
  27. PINSEL0 &= ~(3 < 18);
  28. PINSEL0 |= (0x01 < 16);
  29. PINSEL0 |= (0x01 < 18);
  30. U1LCR = 0x83;              // DLAB = 1,可设置波特率
  31. Fdiv = (Fpclk / 16)/ UART_BPS;            // 设置波特率
  32. U1DLM = Fdiv / 256;
  33. U1DLL = Fdiv % 256;
  34. U1LCR = 0x03;
  35.  #endif
  36. UINT16 Fdiv;
  37. PINSEL0 = 0x00050000;
  38. U1LCR = 0x83;              // DLAB = 1,可设置波特率
  39. Fdiv = (Fpclk / 16)/ UART_BPS;            // 设置波特率
  40. U1DLM = Fdiv / 256;
  41. U1DLL = Fdiv % 256;
  42. U1LCR = 0x03;
  43. }
  44. //--------------------------------------------------------------------------------
  45. void PLL_Init(void)
  46. {
  47.   /* 设置系统各部分时钟 */
  48.    PLLCON = 1;
  49. #if ((Fcclk / 4) / Fpclk) == 1
  50. VPBDIV = 0;
  51. #endif
  52. #if ((Fcclk / 4) / Fpclk) == 2
  53. VPBDIV = 2;
  54. #endif
  55. #if ((Fcclk / 4) / Fpclk) == 4
  56. VPBDIV = 1;
  57. #endif
  58. #if (Fcco / Fcclk) == 2
  59. PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
  60. #endif
  61. #if (Fcco / Fcclk) == 4
  62. PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
  63. #endif
  64. #if (Fcco / Fcclk) == 8
  65. PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
  66. #endif
  67. #if (Fcco / Fcclk) == 16
  68. PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
  69. #endif
  70. PLLFEED = 0xaa;
  71. PLLFEED = 0x55;
  72. while((PLLSTAT & (1 << 10)) == 0);
  73. PLLCON = 3;
  74. PLLFEED = 0xaa;
  75. PLLFEED = 0x55;
  76. }
  77. //--------------------------------------------------------------------------------
  78. #define GPIO10 10
  79. #define GPIO11 11
  80. #define GPIO12 12
  81. #define GPIO13 13
  82. //--------------------------------------------------------------------------------
  83. int main (void) 
  84. {     
  85. //MAM_init();
  86. PLL_Init();
  87. #ifdef USE_UART0_MSG
  88. UART0_Init();
  89. #else
  90. UART1_Init();
  91. #endif
  92.   
  93. RTCInit();
  94. GPIO_init(GPIO11);
  95. GPIO_inout(GPIO11,OUTPUT);
  96. printf (" ---- Program start ---- n");     
  97. while(TRUE)
  98. {
  99. }
  100. }                              
  101. //--------------------------------------------------------------------------------
  102. void GPIO_init(UINT8 GPIO_num)
  103. {
  104. if(GPIO_num < 16)
  105. PINSEL0 &= ~(0x03 << (GPIO_num * 2));
  106. else
  107. PINSEL1 &= ~(0x03 << ((GPIO_num-16) * 2));
  108. }
  109. void GPIO_inout(UINT8 GPIO_num,UINT8 in_out)
  110. {
  111. if(in_out)
  112. IODIR0 |= (0x01 << GPIO_num);//output
  113. else
  114. IODIR0 &= ~(0x01 << GPIO_num); //input
  115. }
  116. //--------------------------------------------------------------------------------
  117. UINT8 GPIO_READ(UINT8 GPIO_num) 
  118. {
  119. if(IOPIN0 & (1 << GPIO_num))
  120. return 1;
  121. else
  122. return 0;
  123. }
  124. //--------------------------------------------------------------------------------
  125. void MAM_init(void)
  126. {
  127. MAMCR = 0x02;
  128. MAMTIM = 0x03;
  129. }
  130. //--------------------------------------------------------------------------------
  131. void  RTCInit(void)
  132. {
  133. YEAR = 2009;     // 初化年
  134. MONTH = 04;     // 初化月
  135. DOM = 10;     // 初化日
  136. HOUR = 12;
  137. MIN = 43;
  138. SEC = 00;
  139. CIIR = 0x01; // 设置秒值的增量产生一次中断
  140. ILR = 0x03;
  141. CCR = 0x11;     // 使用独立振荡器,启动RTC
  142. VICVectCntl1 = 0x20 |13;
  143. VICVectAddr1 = (UINT32)IRQ_RTC;
  144. VICIntEnable |= (1 << 13);
  145. }
  146. //--------------------------------------------------------------------------------
  147. void GPIO_SET(UINT8 GPIO_num,UINT8 High_Low)
  148. {
  149. if(High_Low)
  150. IOSET0 |= (0x01 << GPIO_num);
  151. else
  152. IOCLR0 |= (0x01 << GPIO_num);
  153. //--------------------------------------------------------------------------------
  154. void __irq IRQ_RTC (void)
  155. {
  156. //static UINT8 i = 0;
  157. //printf("-- RTC     VIC interrupt -- %dn",i--);
  158.   printf("RTC -- %4u : %02u : %02u : %02u : %02u : %02un",YEAR,MONTH,DOM,HOUR,MIN,SEC);
  159. if(GPIO_READ(GPIO11))
  160. GPIO_SET(GPIO11,LOW);
  161. else
  162. GPIO_SET(GPIO11,HIGH);
  163. ILR = 0x01; /* 清除中断标志 */
  164. VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
  165. }
  166. //--------------------------------------------------------------------------------