target.c
上传用户:gzxf2008
上传日期:2016-10-05
资源大小:181k
文件大小:5k
源码类别:

单片机开发

开发平台:

C/C++

  1. /**--------------文件信息--------------------------------------------------------------------------------
  2. **文   件   名: target.c
  3. **描        述: lpc210x(飞利浦的ARM)目标板特殊的代码,包括异常处理程序和目标板初始化程序
  4. **              每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。
  5. **注        意:本文件必须以ARM(32位代码)方式编译,否则,必须更改init.s和vector.s文件
  6. **              别的C代码不必使用ARM(32位代码)方式编译
  7. ********************************************************************************************************/
  8. #define IN_TARGET
  9. #include "config.h"
  10. /*********************************************************************************************************
  11. ** 函数名称: IRQ_Exception
  12. ** 功能描述: 中断异常处理程序,用户根据需要自己改变程序
  13. **
  14. ********************************************************************************************************/
  15. void __irq IRQ_Exception(void)
  16. {
  17.     while(1);                   // 这一句替换为自己的代码
  18. }
  19. /*********************************************************************************************************
  20. ** 函数名称: FIQ_Exception
  21. ** 功能描述: 快速中断异常处理程序,用户根据需要自己改变程序
  22. **           
  23. ********************************************************************************************************/
  24.         void FIQ_Exception(void)
  25. {
  26.     while(1);                   // 这一句替换为自己的代码
  27. }
  28. /*********************************************************************************************************
  29. ** 函数名称: TargetInit
  30. ** 功能描述: 目标板初始化代码,在需要的地方调用,根据需要改变
  31. ********************************************************************************************************/
  32.         void TargetInit(void)
  33. {
  34.     /* 添加自己的代码 */
  35. }
  36. /*********************************************************************************************************
  37. ** 函数名称: TargetResetInit
  38. ** 功能描述: 调用main函数前目标板初始化代码,根据需要改变,不能删除
  39. ********************************************************************************************************/
  40.         void TargetResetInit(void)
  41. {
  42.     /* 设置系统各部分时钟 */
  43. /*    PLLCON = 1;
  44. #if ((Fcclk / 4) / Fpclk) == 1
  45.     VPBDIV = 0;
  46. #endif
  47. #if ((Fcclk / 4) / Fpclk) == 2
  48.     VPBDIV = 2;
  49. #endif
  50. #if ((Fcclk / 4) / Fpclk) == 4
  51.     VPBDIV = 1;
  52. #endif
  53. #if (Fcco / Fcclk) == 2
  54.     PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
  55. #endif
  56. #if (Fcco / Fcclk) == 4
  57.     PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
  58. #endif
  59. #if (Fcco / Fcclk) == 8
  60.     PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
  61. #endif
  62. #if (Fcco / Fcclk) == 16
  63.     PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
  64. #endif
  65.     PLLFEED = 0xaa;
  66.     PLLFEED = 0x55;
  67.     while((PLLSTAT & (1 << 10)) == 0);
  68.     PLLCON = 3;
  69.     PLLFEED = 0xaa;
  70.     PLLFEED = 0x55;
  71. */  
  72.     
  73.     /* 设置存储器加速模块 */
  74.     MAMCR = 2; //MAMCR 8u2 00-MAM 功能被禁止、01-MAM功能部分使能、10-MAM功能完全使能
  75.     /* MAMTIM 8u3
  76.     000=0-保留
  77.     001=1-一段时间内只有 1 个处理器时钟(cclk)用于 MAM 取指。
  78.     010=2-一段时间内只有2个处理器时钟(cclk)用于MAM取指。
  79.     011=3-一段时间内只有 3 个处理器时钟(cclk)用于 MAM 取指。
  80.     100=4-一段时间内只有4个处理器时钟(cclk)用于 MAM 取指。
  81.     101=5-一段时间内只有5 个处理器时钟(cclk)用于 MAM 取指。
  82.     110=6-一段时间内只有 6 个处理器时钟(cclk)用于 MAM 取指。
  83.     111=7-一段时间内只有7个处理器时钟(cclk)用于 MAM 取指。
  84.      */
  85. #if Fcclk < 20000000
  86.     MAMTIM = 1;
  87. #else
  88. #if Fcclk < 40000000
  89.     MAMTIM = 2;
  90. #else
  91.     MAMTIM = 3;
  92. #endif
  93. #endif
  94.        
  95.     /* 初始化VIC */
  96.     VICIntEnClr = 0xffffffff;//清所有中断使能,即关中断
  97.     VICVectAddr = 0;//默认向量地址寄存器
  98.     VICIntSelect = 0;//1:对应的中断请求分配为FIQ。0:对应的中断请求分配为IRQ。
  99.     /* 添加自己的代码 */
  100. }
  101. #include "rt_sys.h"
  102. #include "stdio.h"
  103. #pragma import(__use_no_semihosting_swi)
  104. #pragma import(__use_two_region_memory)
  105.         int __rt_div0(int a)
  106. {
  107.     a = a;
  108.     return 0;
  109. }
  110.         int fputc(int ch,FILE *f)
  111. {
  112.     ch = ch;
  113.     f = f;
  114.     return 0;
  115. }
  116.     int fgetc(FILE *f)
  117. {
  118.     f = f;
  119.     return 0;
  120. }
  121.         int _sys_close(FILEHANDLE fh)
  122. {
  123.     fh = fh;
  124.     return 0;
  125. }
  126.         int _sys_write(FILEHANDLE fh, const unsigned char * buf,
  127.                       unsigned len, int mode)
  128. {
  129.     fh = fh;
  130.     buf = buf;
  131.     len =len;
  132.     mode = mode;
  133.     return 0;
  134. }
  135.         int _sys_read(FILEHANDLE fh, unsigned char * buf,
  136.                      unsigned len, int mode)
  137. {
  138.     fh = fh;
  139.     buf = buf;
  140.     len =len;
  141.     mode = mode;
  142.     
  143.     return 0;
  144. }
  145.        void _ttywrch(int ch)
  146. {
  147.     ch = ch;
  148. }
  149.         int _sys_istty(FILEHANDLE fh)
  150. {
  151.     fh = fh;
  152.     return 0;
  153. }
  154.         int _sys_seek(FILEHANDLE fh, long pos)
  155. {
  156.     fh = fh;
  157.     return 0;
  158. }
  159.         int _sys_ensure(FILEHANDLE fh)
  160. {
  161.     fh = fh;
  162.     return 0;
  163. }
  164.         long _sys_flen(FILEHANDLE fh)
  165. {
  166.     fh = fh;
  167.     return 0;
  168. }
  169.        int _sys_tmpnam(char * name, int sig, unsigned maxlen)
  170. {
  171.     name = name;
  172.     sig = sig;
  173.     maxlen = maxlen;
  174.     return 0;
  175. }
  176.         void _sys_exit(int returncode)
  177. {
  178.     returncode = returncode;
  179. }
  180.         char *_sys_command_string(char * cmd, int len)
  181. {
  182.     cmd = cmd;
  183.     len = len;
  184.     return 0;
  185. }
  186. /*********************************************************************************************************
  187. **                            End Of File
  188. ********************************************************************************************************/