target.c
上传用户:zfj3589
上传日期:2022-07-13
资源大小:635k
文件大小:13k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /****************************************Copyright (c)**************************************************
  2. **                               Guangzou ZLG-MCU Development Co.,LTD.
  3. **                                      graduate school
  4. **                                 http://www.zlgmcu.com
  5. **
  6. **--------------File Info-------------------------------------------------------------------------------
  7. ** File name: target.c
  8. ** Last modified Date: 2004-09-17
  9. ** Last Version: 1.0
  10. ** Descriptions: header file of the specific codes for LPC2100 target boards
  11. ** Every project should include a copy of this file, user may modify it as needed
  12. **------------------------------------------------------------------------------------------------------
  13. ** Created by: Chenmingji
  14. ** Created date: 2004-02-02
  15. ** Version: 1.0
  16. ** Descriptions: The original version
  17. **
  18. **------------------------------------------------------------------------------------------------------
  19. ** Modified by: Chenmingji
  20. ** Modified date: 2004-09-17
  21. ** Version: 1.01
  22. ** Descriptions: Renewed the template, added more compiler supports 
  23. **
  24. **------------------------------------------------------------------------------------------------------
  25. ** Modified by: 
  26. ** Modified date:
  27. ** Version:
  28. ** Descriptions: 
  29. **
  30. ********************************************************************************************************/
  31. #define IN_TARGET
  32. #include "config.h"
  33. /*********************************************************************************************************
  34. ** Function name: IRQ_Exception
  35. **
  36. ** Descriptions: interrupt exceptional handler , change it as needed
  37. **
  38. ** input parameters: None
  39. ** Returned value: None
  40. **         
  41. ** Used global variables: None
  42. ** Calling modules: None
  43. **
  44. ** Created by: Chenmingji
  45. ** Created Date: 2004/02/02
  46. **-------------------------------------------------------------------------------------------------------
  47. ** Modified by:
  48. ** Modified date:
  49. **------------------------------------------------------------------------------------------------------
  50. ********************************************************************************************************/
  51.         void IRQ_Exception(void)
  52. {
  53.     while(1);                   // change it to your code  这一句替换为自己的代码
  54. }
  55. /*********************************************************************************************************
  56. ** Function name: FIQ_Exception
  57. **
  58. ** Descriptions: Fast interrupt exceptional handler , change it as needed
  59. **
  60. ** input parameters: None
  61. ** Returned value: None
  62. **         
  63. ** Used global variables: None
  64. ** Calling modules: None
  65. **
  66. ** Created by: Chenmingji
  67. ** Created Date: 2004/02/02
  68. **-------------------------------------------------------------------------------------------------------
  69. ** Modified by:
  70. ** Modified date:
  71. **------------------------------------------------------------------------------------------------------
  72. ********************************************************************************************************/
  73.         void FIQ_Exception(void)
  74. {
  75.     while(1);                   // change it to your code  这一句替换为自己的代码
  76. }
  77. /*********************************************************************************************************
  78. ** Function name: Timer0_Exception
  79. **
  80. ** Descriptions: Timer0 interrupt service function
  81. **
  82. ** input parameters: None
  83. ** Returned value: None
  84. **         
  85. ** Used global variables: None
  86. ** Calling modules: None
  87. **
  88. ** Created by: Chenmingji
  89. ** Created Date: 2004/02/02
  90. **-------------------------------------------------------------------------------------------------------
  91. ** Modified by:
  92. ** Modified date:
  93. **------------------------------------------------------------------------------------------------------
  94. ********************************************************************************************************/
  95.         void Timer0_Exception(void)
  96. {
  97.     T0IR = 0x01;
  98.     VICVectAddr = 0;            //interrupt close 通知中断控制器中断结束
  99.     OSTimeTick();
  100. }
  101. /*********************************************************************************************************
  102. ** Function name: Timer0Init
  103. **
  104. ** Descriptions: Initialize the Time0
  105. **
  106. ** input parameters: None
  107. ** Returned value: None
  108. **         
  109. ** Used global variables: None
  110. ** Calling modules: None
  111. **
  112. ** Created by: Chenmingji
  113. ** Created Date: 2004/02/02
  114. **-------------------------------------------------------------------------------------------------------
  115. ** Modified by:
  116. ** Modified date:
  117. **------------------------------------------------------------------------------------------------------
  118. ********************************************************************************************************/
  119.         void Timer0Init(void)
  120. {
  121.     T0IR = 0xffffffff;
  122.     T0TC = 0;
  123.     T0TCR = 0x01;
  124.     T0MCR = 0x03;
  125.     T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
  126.  }
  127. /*********************************************************************************************************
  128. ** Function name: VICInit
  129. **
  130. ** Descriptions: Initialize the Interrupt Vevtor Controller
  131. **
  132. ** input parameters: None
  133. ** Returned value: None
  134. **         
  135. ** Used global variables: None
  136. ** Calling modules: None
  137. **
  138. ** Created by: Chenmingji
  139. ** Created Date: 2004/02/02
  140. **-------------------------------------------------------------------------------------------------------
  141. ** Modified by:
  142. ** Modified date:
  143. **------------------------------------------------------------------------------------------------------
  144. ********************************************************************************************************/
  145.         void VICInit(void)
  146. {
  147.     extern void IRQ_Handler(void);
  148.     extern void Timer0_Handler(void);
  149.     VICIntEnClr = 0xffffffff;
  150.     VICDefVectAddr = (uint32)IRQ_Handler;
  151.     VICVectAddr0 = (uint32)Timer0_Handler;
  152.     VICVectCntl0 = (0x20 | 0x04);
  153.     VICIntEnable = 1 << 4;
  154.  }
  155. /*********************************************************************************************************
  156. ** Function name: TargetInit
  157. **
  158. ** Descriptions: Initialize the target board; it is called in a necessary place, change it as 
  159. ** needed
  160. **
  161. ** input parameters: None
  162. ** Returned value: None
  163. **         
  164. ** Used global variables: None
  165. ** Calling modules: None
  166. **
  167. ** Created by: Chenmingji
  168. ** Created Date: 2004/02/02
  169. **-------------------------------------------------------------------------------------------------------
  170. ** Modified by:
  171. ** Modified date:
  172. **------------------------------------------------------------------------------------------------------
  173. ********************************************************************************************************/
  174.         void TargetInit(void)
  175. {
  176.     OS_ENTER_CRITICAL();
  177.     srand((uint32) TargetInit);
  178.     VICInit();
  179.     Timer0Init();
  180.     OS_EXIT_CRITICAL();
  181. }
  182. /*********************************************************************************************************
  183. ** Function name: InitialiseUART0
  184. **
  185. ** Descriptions: Initialize the Uart0
  186. **
  187. ** input parameters: None
  188. ** Returned value: None
  189. **         
  190. ** Used global variables: None
  191. ** Calling modules: None
  192. **
  193. ** Created by: Chenmingji
  194. ** Created Date: 2004/02/02
  195. **-------------------------------------------------------------------------------------------------------
  196. ** Modified by:
  197. ** Modified date:
  198. **------------------------------------------------------------------------------------------------------
  199. ********************************************************************************************************/
  200.         void InitialiseUART0(uint32 bps)
  201. {  
  202.     uint16 Fdiv;
  203.     
  204.     PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;    /* Select the pins for Uart 选择管脚为UART0 */
  205.     U0LCR = 0x80;                               /* Enable to access the frequenc regecter 允许访问分频因子寄存器 */
  206.     Fdiv = (Fpclk / 16) / bps;                  /* Set the baudrate设置波特率 */
  207.     U0DLM = Fdiv / 256;
  208. U0DLL = Fdiv % 256;
  209.     U0LCR = 0x03;                               /* Disable to access the frequenc regecter 禁止访问分频因子寄存器 */
  210.                                                 /* set to 8,1,n 且设置为8,1,n */
  211. U0IER = 0x00;                               /* Disable interrupt禁止中断 */
  212.     U0FCR = 0x00;                               /* initial FIFO 初始化FIFO */
  213. /*********************************************************************************************************
  214. ** Function name: TargetResetInit
  215. **
  216. ** Descriptions: Initialize the target 
  217. **
  218. ** input parameters: None
  219. ** Returned value: None
  220. **         
  221. ** Used global variables: None
  222. ** Calling modules: None
  223. **
  224. ** Created by: Chenmingji
  225. ** Created Date: 2004/02/02
  226. **-------------------------------------------------------------------------------------------------------
  227. ** Modified by:
  228. ** Modified date:
  229. **------------------------------------------------------------------------------------------------------
  230. ********************************************************************************************************/
  231.         void TargetResetInit(void)
  232. {
  233. #ifdef __DEBUG_RAM    
  234.     MEMMAP = 0x2;                   //remap
  235. #endif
  236. #ifdef __DEBUG_FLASH    
  237.     MEMMAP = 0x1;                   //remap
  238. #endif
  239. #ifdef __IN_CHIP    
  240.     MEMMAP = 0x1;                   //remap
  241. #endif
  242.     PINSEL0 = (PINSEL0 & 0xFFFF0000) | 0x05 | 0x50;
  243. /* 设置系统各部分时钟 */
  244. /* Set system timers for each component */
  245.     PLLCON = 1;
  246. #if (Fpclk / (Fcclk / 4)) == 1
  247.     VPBDIV = 0;
  248. #endif
  249. #if (Fpclk / (Fcclk / 4)) == 2
  250.     VPBDIV = 2;
  251. #endif
  252. #if (Fpclk / (Fcclk / 4)) == 4
  253.     VPBDIV = 1;
  254. #endif
  255. #if (Fcco / Fcclk) == 2
  256.     PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
  257. #endif
  258. #if (Fcco / Fcclk) == 4
  259.     PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
  260. #endif
  261. #if (Fcco / Fcclk) == 8
  262.     PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
  263. #endif
  264. #if (Fcco / Fcclk) == 16
  265.     PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
  266. #endif
  267.     PLLFEED = 0xaa;
  268.     PLLFEED = 0x55;
  269.     while((PLLSTAT & (1 << 10)) == 0);
  270.     PLLCON = 3;
  271.     PLLFEED = 0xaa;
  272.     PLLFEED = 0x55;
  273. /* 设置存储器加速模块 */
  274. /* Set memory accelerater module*/
  275.     MAMCR = 0;
  276. #if Fcclk < 20000000
  277.     MAMTIM = 1;
  278. #else
  279. #if Fcclk < 40000000
  280.     MAMTIM = 2;
  281. #else
  282.     MAMTIM = 3;
  283. #endif
  284. #endif
  285.     MAMCR = 2;
  286. /* 设置串行口 */
  287. /* initialize UART*/
  288.     InitialiseUART0(115200);
  289. /* 设置实时时钟 */
  290. /* initialize RTC*/
  291.     CCR = 1;
  292.     PREINT = Fpclk / 32768 - 1;
  293.     PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
  294.     YEAR = 2003;
  295.     MONTH = 6;
  296.     DOM = 2;
  297.     
  298. /* initialize VIC*/
  299.     VICIntEnClr = 0xffffffff;
  300.     VICVectAddr = 0;
  301.     VICIntSelect = 0;
  302.     T0IR = 0xffffffff;
  303.     T0TCR = 0X02;
  304. }
  305. /*********************************************************************************************************
  306. **                  以下为一些与系统相关的库函数的实现
  307. **                  具体作用请ads的参考编译器与库函数手册
  308. **                  用户可以根据自己的要求修改        
  309. ********************************************************************************************************/
  310. /*********************************************************************************************************
  311. **                  The implementations for some library functions
  312. **                  For more details, please refer to the ADS compiler handbook and The library 
  313. ** function manual
  314. **                  User could change it as needed       
  315. ********************************************************************************************************/
  316. #include "rt_sys.h"
  317. #include "stdio.h"
  318. #pragma import(__use_no_semihosting_swi)
  319.         int __rt_div0(int a)
  320. {
  321.     a = a;
  322.     return 0;
  323. }
  324.         int fputc(int ch,FILE *f)
  325. {
  326.     ch = ch;
  327.     f = f;
  328.     return 0;
  329. }
  330.     int fgetc(FILE *f)
  331. {
  332.     f = f;
  333.     return 0;
  334. }
  335.         int _sys_close(FILEHANDLE fh)
  336. {
  337.     fh = fh;
  338.     return 0;
  339. }
  340.         int _sys_write(FILEHANDLE fh, const unsigned char * buf,
  341.                       unsigned len, int mode)
  342. {
  343.     fh = fh;
  344.     buf = buf;
  345.     len =len;
  346.     mode = mode;
  347.     return 0;
  348. }
  349.         int _sys_read(FILEHANDLE fh, unsigned char * buf,
  350.                      unsigned len, int mode)
  351. {
  352.     fh = fh;
  353.     buf = buf;
  354.     len =len;
  355.     mode = mode;
  356.     
  357.     return 0;
  358. }
  359.        void _ttywrch(int ch)
  360. {
  361.     ch = ch;
  362. }
  363.         int _sys_istty(FILEHANDLE fh)
  364. {
  365.     fh = fh;
  366.     return 0;
  367. }
  368.         int _sys_seek(FILEHANDLE fh, long pos)
  369. {
  370.     fh = fh;
  371.     return 0;
  372. }
  373.         int _sys_ensure(FILEHANDLE fh)
  374. {
  375.     fh = fh;
  376.     return 0;
  377. }
  378.         long _sys_flen(FILEHANDLE fh)
  379. {
  380.     fh = fh;
  381.     return 0;
  382. }
  383.        int _sys_tmpnam(char * name, int sig, unsigned maxlen)
  384. {
  385.     name = name;
  386.     sig = sig;
  387.     maxlen = maxlen;
  388.     return 0;
  389. }
  390.         void _sys_exit(int returncode)
  391. {
  392.     returncode = returncode;
  393. }
  394.         char *_sys_command_string(char * cmd, int len)
  395. {
  396.     cmd = cmd;
  397.     len = len;
  398.     return 0;
  399. }
  400. /*********************************************************************************************************
  401. **                            End Of File
  402. ********************************************************************************************************/