target.c
上传用户:ssllxx2007
上传日期:2022-06-12
资源大小:784k
文件大小:16k
源码类别:

uCOS

开发平台:

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: silentdawn
  26. ** Modified date:2007-8-4
  27. ** Version:
  28. ** Descriptions: 根据LPC2368的特点和NXP提供的target.c文件进行修改
  29. **
  30. ********************************************************************************************************/
  31. #define IN_TARGET
  32. #include "config.h"
  33. /******************************************************************************
  34. ** Function name: ConfigurePLL
  35. **
  36. ** Descriptions: Configure PLL switching to main OSC instead of IRC
  37. ** at power up and wake up from power down. 
  38. ** This routine is used in TargetResetInit() and those
  39. ** examples using power down and wake up such as
  40. ** USB suspend to resume, ethernet WOL, and power management
  41. ** example
  42. ** parameters: None
  43. ** Returned value: None
  44. ** 
  45. ******************************************************************************/
  46. void ConfigurePLL ( void )
  47. {
  48. uint32 MValue, NValue;
  49. if ( PLLSTAT & (1 << 25) )
  50.     {
  51. PLLCON = 1; /* Enable PLL, disconnected */
  52. PLLFEED = 0xaa;
  53. PLLFEED = 0x55;
  54.     }
  55.     PLLCON = 0; /* Disable PLL, disconnected */
  56.     PLLFEED = 0xaa;
  57.     PLLFEED = 0x55;
  58.     
  59. SCS |= 0x20; /* Enable main OSC */
  60.     while( !(SCS & 0x40) ); /* Wait until main OSC is usable */
  61.     CLKSRCSEL = 0x1; /* select main OSC, 12MHz, as the PLL clock source */
  62.     PLLCFG = PLL_MValue | (PLL_NValue << 16);
  63.     PLLFEED = 0xaa;
  64.     PLLFEED = 0x55;
  65.       
  66.     PLLCON = 1; /* Enable PLL, disconnected */
  67.     PLLFEED = 0xaa;
  68.     PLLFEED = 0x55;
  69.     CCLKCFG = CCLKDivValue; /* Set clock divider */
  70. #if USE_USB
  71.     USBCLKCFG = USBCLKDivValue; /* usbclk = 288 MHz/6 = 48 MHz */
  72. #endif
  73.     while ( ((PLLSTAT & (1 << 26)) == 0) ); /* Check lock bit status */
  74.     
  75.     MValue = PLLSTAT & 0x00007FFF;
  76.     NValue = (PLLSTAT & 0x00FF0000) >> 16;
  77.     while ((MValue != PLL_MValue) && ( NValue != PLL_NValue) );
  78.     PLLCON = 3; /* enable and connect */
  79.     PLLFEED = 0xaa;
  80.     PLLFEED = 0x55;
  81. while ( ((PLLSTAT & (1 << 25)) == 0) ); /* Check connect bit status */
  82. return;
  83. }
  84. /******************************************************************************
  85. ** Function name: GPIOResetInit
  86. **
  87. ** Descriptions: Initialize the target board before running the main() 
  88. ** function; User may change it as needed, but may not 
  89. ** deleted it.
  90. **
  91. ** parameters: None
  92. ** Returned value: None
  93. ** 
  94. ******************************************************************************/
  95. void GPIOResetInit( void )
  96. {
  97. /* Reset all GPIO pins to default: primary function */
  98.     PINSEL0 = 0x00000000;
  99.     PINSEL1 = 0x00000000;
  100.     PINSEL2 = 0x00000000;
  101.     PINSEL3 = 0x00000000;
  102.     PINSEL4 = 0x00000000;
  103.     PINSEL5 = 0x00000000;
  104.     PINSEL6 = 0x00000000;
  105.     PINSEL7 = 0x00000000;
  106.     PINSEL8 = 0x00000000;
  107.     PINSEL9 = 0x00000000;
  108.     PINSEL10 = 0x00000000;
  109.     
  110.     IODIR0 = 0x00000000;
  111.     IODIR1 = 0x00000000;
  112. IOSET0 = 0x00000000;
  113.     IOSET1 = 0x00000000;
  114.     
  115.     FIO0DIR = 0x00000000;
  116.     FIO1DIR = 0x00000000;
  117.     FIO2DIR = 0x00000000;
  118.     FIO3DIR = 0x00000000;
  119.     FIO4DIR = 0x00000000;
  120.     
  121.     FIO0SET = 0x00000000;
  122.     FIO1SET = 0x00000000;
  123.     FIO2SET = 0x00000000;
  124.     FIO3SET = 0x00000000;
  125.     FIO4SET = 0x00000000;
  126.     return;        
  127. }
  128. /* Initialize the interrupt controller */
  129. /******************************************************************************
  130. ** Function name: init_VIC
  131. **
  132. ** Descriptions: Initialize VIC interrupt controller.
  133. ** parameters: None
  134. ** Returned value: None
  135. ** 
  136. ******************************************************************************/
  137. void init_VIC(void) 
  138. {
  139.     uint32 i = 0;
  140.     uint32 *vect_addr, *vect_cntl;
  141.    
  142.     /* initialize VIC*/
  143.     VICIntEnClr = 0xffffffff;
  144.     VICVectAddr = 0;
  145.     VICIntSelect = 0;
  146.     /* set all the vector and vector control register to 0 */
  147.     for ( i = 0; i < VIC_SIZE; i++ )
  148.     {
  149. vect_addr = (uint32 *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + i*4);
  150. vect_cntl = (uint32 *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + i*4);
  151. *vect_addr = 0x0;
  152. *vect_cntl = 0xF;
  153.     }
  154.     return;
  155. }
  156. /*********************************************************************************************************
  157. ** Function name: TargetResetInit
  158. **
  159. ** Descriptions: Initialize the target 
  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 TargetResetInit(void)
  175. {
  176. #ifdef __DEBUG_RAM    
  177.     MEMMAP = 0x2; /* remap to internal RAM */
  178. #endif
  179. #ifdef __DEBUG_FLASH    
  180.     MEMMAP = 0x1; /* remap to internal flash */
  181. #endif
  182. #if USE_USB
  183. PCONP |= 0x80000000; /* Turn On USB PCLK */
  184. #endif
  185. /* Configure PLL, switch from IRC to Main OSC */
  186. ConfigurePLL();
  187.   /* Set system timers for each component */
  188. #if (Fpclk / (Fcclk / 4)) == 1
  189.     PCLKSEL0 = 0x00000000; /* PCLK is 1/4 CCLK */
  190.     PCLKSEL1 = 0x00000000;
  191. #endif
  192. #if (Fpclk / (Fcclk / 4)) == 2
  193.     PCLKSEL0 = 0xAAAAAAAA; /* PCLK is 1/2 CCLK */
  194.     PCLKSEL1 = 0xAAAAAAAA;  
  195. #endif
  196. #if (Fpclk / (Fcclk / 4)) == 4
  197.     PCLKSEL0 = 0x55555555; /* PCLK is the same as CCLK */
  198.     PCLKSEL1 = 0x55555555;
  199. #endif
  200.     /* Set memory accelerater module*/
  201.     MAMCR = 0;
  202. #if Fcclk < 20000000
  203.     MAMTIM = 1;
  204. #else
  205. #if Fcclk < 40000000
  206.     MAMTIM = 2;
  207. #else
  208.     MAMTIM = 3;
  209. #endif
  210. #endif
  211.     MAMCR = 2;
  212.     GPIOResetInit();
  213. init_VIC();
  214.     return;
  215. }
  216. /******************************************************************************
  217. ** Function name: install_irq
  218. **
  219. ** Descriptions: Install interrupt handler
  220. ** parameters: Interrupt number, interrupt handler address, 
  221. ** interrupt priority
  222. ** Returned value: true or false, return false if IntNum is out of range
  223. ** 
  224. ** Used global variables: None
  225. ** Calling modules: None
  226. **
  227. ** Added by:silentdawn
  228. **
  229. ******************************************************************************/
  230. uint32 Install_IRQ( uint32 IntNumber, void *HandlerAddr, uint32 Priority )
  231. {
  232.     uint32 *vect_addr;
  233.     uint32 *vect_cntl;
  234.       
  235.     VICIntEnClr = 1 << IntNumber; /* Disable Interrupt */
  236.     if ( IntNumber >= VIC_SIZE )
  237.     {
  238. return ( FALSE );
  239.     }
  240.     else
  241.     {
  242. /* find first un-assigned VIC address for the handler */
  243. vect_addr = (uint32 *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + IntNumber*4);
  244. vect_cntl = (uint32 *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + IntNumber*4);
  245. *vect_addr = (uint32)HandlerAddr; /* set interrupt vector */
  246. *vect_cntl = Priority;
  247. VICIntEnable = 1 << IntNumber; /* Enable Interrupt */
  248. return( TRUE );
  249.     }
  250. }
  251. void init_port(void)
  252.  {
  253. //LPC2368开发板的LED是采用P2.0~P2.7
  254.  //port initialized
  255.  FIO2DIR=0x000000FF;
  256.  FIO2SET=0x000000FF; //ALL LED OFF
  257.  }
  258. /*********************************************************************************************************
  259. ** Function name: IRQ_Exception
  260. **
  261. ** Descriptions: interrupt exceptional handler , change it as needed
  262. **
  263. ** input parameters: None
  264. ** Returned value: None
  265. **         
  266. ** Used global variables: None
  267. ** Calling modules: None
  268. **
  269. ** Created by: Chenmingji
  270. ** Created Date: 2004/02/02
  271. **-------------------------------------------------------------------------------------------------------
  272. ** Modified by:
  273. ** Modified date:
  274. **------------------------------------------------------------------------------------------------------
  275. ********************************************************************************************************/
  276. void IRQ_Exception(void)
  277. {
  278.     while(1);                   // change it to your code  这一句替换为自己的代码
  279. }
  280. /*********************************************************************************************************
  281. ** Function name: FIQ_Exception
  282. **
  283. ** Descriptions: Fast interrupt exceptional handler , change it as needed
  284. **
  285. ** input parameters: None
  286. ** Returned value: None
  287. **         
  288. ** Used global variables: None
  289. ** Calling modules: None
  290. **
  291. ** Created by: Chenmingji
  292. ** Created Date: 2004/02/02
  293. **-------------------------------------------------------------------------------------------------------
  294. ** Modified by:
  295. ** Modified date:
  296. **------------------------------------------------------------------------------------------------------
  297. ********************************************************************************************************/
  298. void FIQ_Exception(void)
  299. {
  300.     while(1);                   // change it to your code  这一句替换为自己的代码
  301. }
  302. /*********************************************************************************************************
  303. ** Function name: Timer0_Exception
  304. **
  305. ** Descriptions: Timer0 interrupt service function
  306. **
  307. ** input parameters: None
  308. ** Returned value: None
  309. **         
  310. ** Used global variables: None
  311. ** Calling modules: None
  312. **
  313. ** Created by: Chenmingji
  314. ** Created Date: 2004/02/02
  315. **-------------------------------------------------------------------------------------------------------
  316. ** Modified by:
  317. ** Modified date:
  318. **------------------------------------------------------------------------------------------------------
  319. ********************************************************************************************************/
  320. void Timer0_Exception(void)
  321. {
  322.     T0IR = 0x01;
  323.     VICVectAddr = 0;            //interrupt close 通知中断控制器中断结束
  324.     OSTimeTick();
  325. }
  326. /*********************************************************************************************************
  327. ** Function name: Timer0Init
  328. **
  329. ** Descriptions: Initialize the Time0
  330. **
  331. ** input parameters: None
  332. ** Returned value: None
  333. **         
  334. ** Used global variables: None
  335. ** Calling modules: None
  336. **
  337. ** Created by: Chenmingji
  338. ** Created Date: 2004/02/02
  339. **-------------------------------------------------------------------------------------------------------
  340. ** Modified by:
  341. ** Modified date:
  342. **------------------------------------------------------------------------------------------------------
  343. ********************************************************************************************************/
  344. void Timer0Init(void)
  345. {
  346.     T0IR = 0xffffffff;
  347.     T0TC = 0;
  348.     T0TCR = 0x01;
  349.     T0MCR = 0x03;
  350.     T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
  351.  }
  352. /*********************************************************************************************************
  353. ** Function name: VIC_Setup
  354. **
  355. ** Descriptions: distribute VIC
  356. **
  357. ** input parameters: None
  358. ** Returned value: None
  359. **         
  360. ** Used global variables: None
  361. ** Calling modules: None
  362. **
  363. ** Created by: silentdawn
  364. ** Created Date: 2004/02/02
  365. **-------------------------------------------------------------------------------------------------------
  366. ** Modified by:
  367. ** Modified date:
  368. **------------------------------------------------------------------------------------------------------
  369. ********************************************************************************************************/
  370. void VIC_Setup(void)
  371. {
  372. // extern void IRQ_Handler(void);
  373. extern void Timer0_Handler(void);
  374.   //分配给定时器0优先级为0
  375.   Install_IRQ(TIMER0_INT,(void *)Timer0_Handler,0);
  376. }
  377. /*********************************************************************************************************
  378. ** Function name: TargetInit
  379. **
  380. ** Descriptions: Initialize the target board; it is called in a necessary place, change it as 
  381. ** needed
  382. **
  383. ** input parameters: None
  384. ** Returned value: None
  385. **         
  386. ** Used global variables: None
  387. ** Calling modules: None
  388. **
  389. ** Created by: Chenmingji
  390. ** Created Date: 2004/02/02
  391. **-------------------------------------------------------------------------------------------------------
  392. ** Modified by:
  393. ** Modified date:
  394. **------------------------------------------------------------------------------------------------------
  395. ********************************************************************************************************/
  396. void TargetInit(void)
  397. {
  398.     OS_ENTER_CRITICAL();
  399.     srand((uint32) TargetInit);
  400.     VIC_Setup();
  401.     Timer0Init();
  402. init_port();
  403.     OS_EXIT_CRITICAL();
  404. }
  405. /*********************************************************************************************************
  406. **                  以下为一些与系统相关的库函数的实现
  407. **                  具体作用请ads的参考编译器与库函数手册
  408. **                  用户可以根据自己的要求修改        
  409. ********************************************************************************************************/
  410. /*********************************************************************************************************
  411. **                  The implementations for some library functions
  412. **                  For more details, please refer to the ADS compiler handbook and The library 
  413. ** function manual
  414. **                  User could change it as needed       
  415. ********************************************************************************************************/
  416. /*
  417. 这段程序,,去除掉。。。
  418. by mcu123
  419. 在startup.s 中添加了
  420. */
  421. /*
  422. #include "rt_sys.h"
  423. #include "stdio.h"
  424. #pragma import(__use_no_semihosting_swi)
  425.         int __rt_div0(int a)
  426. {
  427.     a = a;
  428.     return 0;
  429. }
  430.         int fputc(int ch,FILE *f)
  431. {
  432.     ch = ch;
  433.     f = f;
  434.     return 0;
  435. }
  436.     int fgetc(FILE *f)
  437. {
  438.     f = f;
  439.     return 0;
  440. }
  441.         int _sys_close(FILEHANDLE fh)
  442. {
  443.     fh = fh;
  444.     return 0;
  445. }
  446.         int _sys_write(FILEHANDLE fh, const unsigned char * buf,
  447.                       unsigned len, int mode)
  448. {
  449.     fh = fh;
  450.     buf = buf;
  451.     len =len;
  452.     mode = mode;
  453.     return 0;
  454. }
  455.         int _sys_read(FILEHANDLE fh, unsigned char * buf,
  456.                      unsigned len, int mode)
  457. {
  458.     fh = fh;
  459.     buf = buf;
  460.     len =len;
  461.     mode = mode;
  462.     
  463.     return 0;
  464. }
  465.        void _ttywrch(int ch)
  466. {
  467.     ch = ch;
  468. }
  469.         int _sys_istty(FILEHANDLE fh)
  470. {
  471.     fh = fh;
  472.     return 0;
  473. }
  474.         int _sys_seek(FILEHANDLE fh, long pos)
  475. {
  476.     fh = fh;
  477.     return 0;
  478. }
  479.         int _sys_ensure(FILEHANDLE fh)
  480. {
  481.     fh = fh;
  482.     return 0;
  483. }
  484.         long _sys_flen(FILEHANDLE fh)
  485. {
  486.     fh = fh;
  487.     return 0;
  488. }
  489.        int _sys_tmpnam(char * name, int sig, unsigned maxlen)
  490. {
  491.     name = name;
  492.     sig = sig;
  493.     maxlen = maxlen;
  494.     return 0;
  495. }
  496.         void _sys_exit(int returncode)
  497. {
  498.     returncode = returncode;
  499. }
  500.         char *_sys_command_string(char * cmd, int len)
  501. {
  502.     cmd = cmd;
  503.     len = len;
  504.     return 0;
  505. }
  506. */
  507. /*********************************************************************************************************
  508. **                            End Of File
  509. ********************************************************************************************************/