target.c
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:14k
源码类别:

GPS编程

开发平台:

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