target.c
上传用户:dsfgsdff
上传日期:2022-07-10
资源大小:319k
文件大小:15k
源码类别:

微处理器开发

开发平台:

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. OS_TCB    *ptcb; 
  98.     T0IR = 0x01;
  99.     VICVectAddr = 0;            //interrupt close 通知中断控制器中断结束
  100. #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
  101.     OS_CPU_SR  cpu_sr;
  102. #endif 
  103. //     OSTimeTickHook();                                      /* Call user definable hook                 */
  104. #if OS_TIME_GET_SET_EN > 0   
  105.     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
  106.     OSTime++;
  107.     OS_EXIT_CRITICAL();
  108. #endif
  109.     if (OSRunning == TRUE) {    
  110.         ptcb = OSTCBList;                                  /* Point at first TCB in TCB list           */
  111.         while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {          /* Go through all TCBs in TCB list          */
  112.             OS_ENTER_CRITICAL();
  113.             if (ptcb->OSTCBDly != 0) {                     /* Delayed or waiting for event with TO     */
  114.                 if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay   */
  115.                     if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended?    */
  116.                         OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task R-to-R (timed out)*/
  117.                         OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
  118.                     } else {                               /* Yes, Leave 1 tick to prevent ...         */
  119.                         ptcb->OSTCBDly = 1;                /* ... loosing the task when the ...        */
  120.                     }                                      /* ... suspension is removed.               */
  121.                 }
  122.             }
  123.             ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list            */
  124.             OS_EXIT_CRITICAL();
  125.         }
  126.     }
  127. }
  128. /*********************************************************************************************************
  129. ** Function name: Timer0Init
  130. **
  131. ** Descriptions: Initialize the Time0
  132. **
  133. ** input parameters: None
  134. ** Returned value: None
  135. **         
  136. ** Used global variables: None
  137. ** Calling modules: None
  138. **
  139. ** Created by: Chenmingji
  140. ** Created Date: 2004/02/02
  141. **-------------------------------------------------------------------------------------------------------
  142. ** Modified by:
  143. ** Modified date:
  144. **------------------------------------------------------------------------------------------------------
  145. ********************************************************************************************************/
  146. void Timer0Init(void)
  147. {
  148.     T0IR = 0xffffffff;
  149.     T0TC = 0;
  150.     T0TCR = 0x01;
  151.     T0MCR = 0x03;
  152.     T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
  153.  }
  154. /*********************************************************************************************************
  155. ** Function name: VICInit
  156. **
  157. ** Descriptions: Initialize the Interrupt Vevtor Controller
  158. **
  159. ** input parameters: None
  160. ** Returned value: None
  161. **         
  162. ** Used global variables: None
  163. ** Calling modules: None
  164. **
  165. ** Created by: Chenmingji
  166. ** Created Date: 2004/02/02
  167. **-------------------------------------------------------------------------------------------------------
  168. ** Modified by:
  169. ** Modified date:
  170. **------------------------------------------------------------------------------------------------------
  171. ********************************************************************************************************/
  172. void VICInit(void)
  173. {
  174.     extern void IRQ_Handler(void);
  175.     extern void Timer0_Handler(void);
  176.     VICIntEnClr = 0xffffffff;
  177.     VICDefVectAddr = (uint32)IRQ_Handler;
  178.     VICVectAddr0 = (uint32)Timer0_Handler;
  179.     VICVectCntl0 = (0x20 | 0x04);
  180.     VICIntEnable = 1 << 4;
  181. }
  182. /*********************************************************************************************************
  183. ** Function name: TargetInit
  184. **
  185. ** Descriptions: Initialize the target board; it is called in a necessary place, change it as 
  186. ** needed
  187. **
  188. ** input parameters: None
  189. ** Returned value: None
  190. **         
  191. ** Used global variables: None
  192. ** Calling modules: None
  193. **
  194. ** Created by: Chenmingji
  195. ** Created Date: 2004/02/02
  196. **-------------------------------------------------------------------------------------------------------
  197. ** Modified by:
  198. ** Modified date:
  199. **------------------------------------------------------------------------------------------------------
  200. ********************************************************************************************************/
  201. void TargetInit(void)
  202. {
  203.     OS_ENTER_CRITICAL();
  204.     srand((uint32) TargetInit);
  205.     VICInit();
  206.     Timer0Init();
  207.     OS_EXIT_CRITICAL();
  208. }
  209. /*********************************************************************************************************
  210. ** Function name: InitialiseUART0
  211. **
  212. ** Descriptions: Initialize the Uart0
  213. **
  214. ** input parameters: None
  215. ** Returned value: None
  216. **         
  217. ** Used global variables: None
  218. ** Calling modules: None
  219. **
  220. ** Created by: Chenmingji
  221. ** Created Date: 2004/02/02
  222. **-------------------------------------------------------------------------------------------------------
  223. ** Modified by:
  224. ** Modified date:
  225. **------------------------------------------------------------------------------------------------------
  226. ********************************************************************************************************/
  227. void InitialiseUART0(uint32 bps)
  228. {  
  229.     uint16 Fdiv;
  230.     
  231.     PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;    /* Select the pins for Uart 选择管脚为UART0 */
  232.     U0LCR = 0x80;                               /* Enable to access the frequenc regecter 允许访问分频因子寄存器 */
  233.     Fdiv = (Fpclk / 16) / bps;                  /* Set the baudrate设置波特率 */
  234.     U0DLM = Fdiv / 256;
  235. U0DLL = Fdiv % 256;
  236.     U0LCR = 0x03;                               /* Disable to access the frequenc regecter 禁止访问分频因子寄存器 */
  237.                                                 /* set to 8,1,n 且设置为8,1,n */
  238. U0IER = 0x00;                               /* Disable interrupt禁止中断 */
  239.     U0FCR = 0x00;                               /* initial FIFO 初始化FIFO */
  240. /*********************************************************************************************************
  241. ** Function name: TargetResetInit
  242. **
  243. ** Descriptions: Initialize the target 
  244. **
  245. ** input parameters: None
  246. ** Returned value: None
  247. **         
  248. ** Used global variables: None
  249. ** Calling modules: None
  250. **
  251. ** Created by: Chenmingji
  252. ** Created Date: 2004/02/02
  253. **-------------------------------------------------------------------------------------------------------
  254. ** Modified by:
  255. ** Modified date:
  256. **------------------------------------------------------------------------------------------------------
  257. ********************************************************************************************************/
  258. void TargetResetInit(void)
  259. {
  260. #ifdef __DEBUG_RAM    
  261.     MEMMAP = 0x2;                   //remap
  262. #endif
  263. #ifdef __DEBUG_FLASH    
  264.     MEMMAP = 0x1;                   //remap
  265. #endif
  266. #ifdef __IN_CHIP    
  267.     MEMMAP = 0x1;                   //remap
  268. #endif
  269. PINSEL0 = (PINSEL0 & 0xFFFF0000) | 0x05 | 0x50;
  270. /* 设置系统各部分时钟 */
  271. /* Set system timers for each component */
  272.     PLLCON = 1;
  273. #if (Fpclk / (Fcclk / 4)) == 1
  274.     VPBDIV = 0;
  275. #endif
  276. #if (Fpclk / (Fcclk / 4)) == 2
  277.     VPBDIV = 2;
  278. #endif
  279. #if (Fpclk / (Fcclk / 4)) == 4
  280.     VPBDIV = 1;
  281. #endif
  282. #if (Fcco / Fcclk) == 2
  283.     PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
  284. #endif
  285. #if (Fcco / Fcclk) == 4
  286.     PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
  287. #endif
  288. #if (Fcco / Fcclk) == 8
  289.     PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
  290. #endif
  291. #if (Fcco / Fcclk) == 16
  292.     PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
  293. #endif
  294.     PLLFEED = 0xaa;
  295.     PLLFEED = 0x55;
  296.     while((PLLSTAT & (1 << 10)) == 0);
  297.     PLLCON = 3;
  298.     PLLFEED = 0xaa;
  299.     PLLFEED = 0x55;
  300. /* 设置存储器加速模块 */
  301. /* Set memory accelerater module*/
  302.     MAMCR = 0;
  303. #if Fcclk < 20000000
  304.     MAMTIM = 1;
  305. #else
  306. #if Fcclk < 40000000
  307.     MAMTIM = 2;
  308. #else
  309.     MAMTIM = 3;
  310. #endif
  311. #endif
  312.     MAMCR = 2;
  313. /* 设置串行口 */
  314. /* initialize UART*/
  315.     InitialiseUART0(115200);
  316. /* 设置实时时钟 */
  317. /* initialize RTC*/
  318.     CCR = 1;
  319.     PREINT = Fpclk / 32768 - 1;
  320.     PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
  321.     YEAR = 2003;
  322.     MONTH = 6;
  323.     DOM = 2;
  324.     
  325. /* initialize VIC*/
  326.     VICIntEnClr = 0xffffffff;
  327.     VICVectAddr = 0;
  328.     VICIntSelect = 0;
  329.     T0IR = 0xffffffff;
  330.     T0TCR = 0X02;
  331. }
  332. /*********************************************************************************************************
  333. **                  以下为一些与系统相关的库函数的实现
  334. **                  具体作用请ads的参考编译器与库函数手册
  335. **                  用户可以根据自己的要求修改        
  336. ********************************************************************************************************/
  337. /*********************************************************************************************************
  338. **                  The implementations for some library functions
  339. **                  For more details, please refer to the ADS compiler handbook and The library 
  340. ** function manual
  341. **                  User could change it as needed       
  342. ********************************************************************************************************/
  343. #include "rt_sys.h"
  344. #include "stdio.h" 
  345. #pragma import(__use_no_semihosting_swi)
  346.  int __rt_div0(int a)
  347. {
  348.     a = a;
  349.     return 0;
  350. }
  351. int fputc(int ch,FILE *f)
  352. {
  353.     ch = ch;
  354.     f = f;
  355.     return 0;
  356. }
  357. int fgetc(FILE *f)
  358. {
  359.     f = f;
  360.     return 0;
  361. }
  362. int _sys_close(FILEHANDLE fh)
  363. {
  364.     fh = fh;
  365.     return 0;
  366. }
  367. int _sys_write(FILEHANDLE fh, const unsigned char * buf,unsigned len, int mode)
  368. {
  369.     fh = fh;
  370.     buf = buf;
  371.     len =len;
  372.     mode = mode;
  373.     return 0;
  374. }
  375. int _sys_read(FILEHANDLE fh, unsigned char * buf,unsigned len, int mode)
  376. {
  377.     fh = fh;
  378.     buf = buf;
  379.     len =len;
  380.     mode = mode;
  381.     
  382.     return 0;
  383. }
  384. void _ttywrch(int ch)
  385. {
  386.     ch = ch;
  387. }
  388. int _sys_istty(FILEHANDLE fh)
  389. {
  390.     fh = fh;
  391.     return 0;
  392. }
  393. int _sys_seek(FILEHANDLE fh, long pos)
  394. {
  395.     fh = fh;
  396.     return 0;
  397. }
  398.         int _sys_ensure(FILEHANDLE fh)
  399. {
  400.     fh = fh;
  401.     return 0;
  402. }
  403. long _sys_flen(FILEHANDLE fh)
  404. {
  405.     fh = fh;
  406.     return 0;
  407. }
  408. int _sys_tmpnam(char * name, int sig, unsigned maxlen)
  409. {
  410.     name = name;
  411.     sig = sig;
  412.     maxlen = maxlen;
  413.     return 0;
  414. }
  415. void _sys_exit(int returncode)
  416. {
  417.     returncode = returncode;
  418. }
  419. char *_sys_command_string(char * cmd, int len)
  420. {
  421.     cmd = cmd;
  422.     len = len;
  423.     return 0;
  424. }
  425. /*********************************************************************************************************
  426. **                            End Of File
  427. ********************************************************************************************************/