M52233DEMO_sysinit.c
上传用户:dongxin
上传日期:2022-06-22
资源大小:370k
文件大小:7k
源码类别:

uCOS

开发平台:

Others

  1. /*
  2.  * File: m52233demo_sysinit.c
  3.  * Purpose: Power-on Reset configuration of the M52233DEMO.
  4.  *
  5.  * Notes: 
  6.  *
  7.  */
  8. #include "support_common.h"
  9. #include "m52233demo_sysinit.h"
  10.  /* Cache Control Register */
  11. #define MCF5XXX_CACR_CENB       (0x80000000)
  12. #define MCF5XXX_CACR_DEC        (0x80000000)
  13. #define MCF5XXX_CACR_DW         (0x40000000)
  14. #define MCF5XXX_CACR_DESB       (0x20000000)
  15. #define MCF5XXX_CACR_CPDI       (0x10000000)
  16. #define MCF5XXX_CACR_DDPI       (0x10000000)
  17. #define MCF5XXX_CACR_CPD        (0x10000000)
  18. #define MCF5XXX_CACR_CFRZ       (0x08000000)
  19. #define MCF5XXX_CACR_DHLCK      (0x08000000)
  20. #define MCF5XXX_CACR_DDCM_WT    (0x00000000)
  21. #define MCF5XXX_CACR_DDCM_CB    (0x02000000)
  22. #define MCF5XXX_CACR_DDCM_IP    (0x04000000)
  23. #define MCF5XXX_CACR_DDCM_II    (0x06000000)
  24. #define MCF5XXX_CACR_CINV       (0x01000000)
  25. #define MCF5XXX_CACR_DCINVA     (0x01000000)
  26. #define MCF5XXX_CACR_DIDI       (0x00800000)
  27. #define MCF5XXX_CACR_DDSP       (0x00800000)
  28. #define MCF5XXX_CACR_DISD       (0x00400000)
  29. #define MCF5XXX_CACR_INVI       (0x00200000)
  30. #define MCF5XXX_CACR_INVD       (0x00100000)
  31. #define MCF5XXX_CACR_BEC        (0x00080000)
  32. #define MCF5XXX_CACR_BCINVA     (0x00040000)
  33. #define MCF5XXX_CACR_IEC        (0x00008000)
  34. #define MCF5XXX_CACR_DNFB       (0x00002000)
  35. #define MCF5XXX_CACR_IDPI       (0x00001000)
  36. #define MCF5XXX_CACR_IHLCK      (0x00000800)
  37. #define MCF5XXX_CACR_CEIB       (0x00000400)
  38. #define MCF5XXX_CACR_IDCM       (0x00000400)
  39. #define MCF5XXX_CACR_DCM_WR     (0x00000000)
  40. #define MCF5XXX_CACR_DCM_CB     (0x00000100)
  41. #define MCF5XXX_CACR_DCM_IP     (0x00000200)
  42. #define MCF5XXX_CACR_DCM        (0x00000200)
  43. #define MCF5XXX_CACR_DCM_II     (0x00000300)
  44. #define MCF5XXX_CACR_DBWE       (0x00000100)
  45. #define MCF5XXX_CACR_ICINVA     (0x00000100)
  46. #define MCF5XXX_CACR_IDSP       (0x00000080)
  47. #define MCF5XXX_CACR_DWP        (0x00000020)
  48. #define MCF5XXX_CACR_EUSP       (0x00000020)
  49. #define MCF5XXX_CACR_EUST       (0x00000020)
  50. #define MCF5XXX_CACR_DF         (0x00000010)
  51. #define MCF5XXX_CACR_CLNF_00    (0x00000000)
  52. #define MCF5XXX_CACR_CLNF_01    (0x00000002)
  53. #define MCF5XXX_CACR_CLNF_10    (0x00000004)
  54. #define MCF5XXX_CACR_CLNF_11    (0x00000006)
  55. asm void mcf5xxx_wr_cacr(unsigned long) { /* Set VBR */
  56.     move.l  4(SP),D0
  57.     //.long   0x4e7b0002      /* movec d0,cacr */
  58.     movec d0,cacr 
  59.     nop
  60.     
  61.     rts
  62. }
  63. /********************************************************************/
  64. static void mcf52233_wtm_init(void)
  65. {
  66. /*
  67.  * Disable Software Watchdog Timer
  68.  */
  69. MCF_SCM_CWCR = 0;
  70. }
  71. /********************************************************************/
  72. static void mcf52233_pll_init(void)
  73. {
  74. //MCF_CLOCK_CCHR =0x05; // The PLL pre divider - 25MHz / 5 = 5MHz 
  75. /* The PLL pre-divider affects this!!! 
  76.  * Multiply 25Mhz reference crystal /CCHR by 12 to acheive system clock of 60Mhz
  77.  */
  78. MCF_CLOCK_SYNCR = MCF_CLOCK_SYNCR_MFD(4) | MCF_CLOCK_SYNCR_CLKSRC| MCF_CLOCK_SYNCR_PLLMODE | MCF_CLOCK_SYNCR_PLLEN ;
  79. while (!(MCF_CLOCK_SYNSR & MCF_CLOCK_SYNSR_LOCK))
  80. {
  81. }
  82. }
  83. /********************************************************************/
  84. static void mcf52233_scm_init(void)
  85. {
  86. /*
  87.  * Enable on-chip modules to access internal SRAM
  88.  */
  89. MCF_SCM_RAMBAR = (0
  90. | MCF_SCM_RAMBAR_BA(RAMBAR_ADDRESS)
  91. | MCF_SCM_RAMBAR_BDE);
  92. }
  93. /********************************************************************/
  94. static void mcf52233_gpio_init(void)
  95. {
  96.   uint32 myctr;  //generic counter variable
  97. /*
  98.  * Initialize PLDPAR to enable Ethernet Leds
  99.  */
  100.   MCF_GPIO_PLDPAR = (0
  101.   
  102.  | MCF_GPIO_PLDPAR_ACTLED_ACTLED 
  103.  | MCF_GPIO_PLDPAR_LINKLED_LINKLED 
  104.  | MCF_GPIO_PLDPAR_SPDLED_SPDLED 
  105.  | MCF_GPIO_PLDPAR_DUPLED_DUPLED 
  106.  | MCF_GPIO_PLDPAR_COLLED_COLLED 
  107.  | MCF_GPIO_PLDPAR_RXLED_RXLED   
  108.  | MCF_GPIO_PLDPAR_TXLED_TXLED);  
  109. /*
  110.  * Initialize Port TA to enable Axcel control
  111.  */
  112. MCF_GPIO_PTAPAR = 0x00; 
  113. MCF_GPIO_DDRTA  = 0x0F;
  114. MCF_GPIO_PORTTA = 0x04;
  115.   
  116.   // set phy address to zero
  117.   MCF_EPHY_EPHYCTL1 = MCF_EPHY_EPHYCTL1_PHYADD(FEC_PHY0); // FEC_PHY0 from m52233evb.h 
  118.   //Enable EPHY module with PHY clocks disabled
  119.   //Do not turn on PHY clocks until both FEC and EPHY are completely setup (see Below)
  120.   MCF_EPHY_EPHYCTL0 = (uint8)(MCF_EPHY_EPHYCTL0_DIS100 | MCF_EPHY_EPHYCTL0_DIS10);
  121.   
  122.   //Enable auto_neg at start-up
  123.   MCF_EPHY_EPHYCTL0 = (uint8)(MCF_EPHY_EPHYCTL0 & (MCF_EPHY_EPHYCTL0_ANDIS));
  124.   //Enable EPHY module
  125.   MCF_EPHY_EPHYCTL0 = (uint8)(MCF_EPHY_EPHYCTL0_EPHYEN | MCF_EPHY_EPHYCTL0);
  126.   //Let PHY PLLs be determined by PHY
  127.   MCF_EPHY_EPHYCTL0 = (uint8)(MCF_EPHY_EPHYCTL0  & ~(MCF_EPHY_EPHYCTL0_DIS100 | MCF_EPHY_EPHYCTL0_DIS10)); 
  128.   //printf("ePHY enabled nr");
  129.   //DELAY, Delay start-up
  130.   for (myctr=200000; myctr >0; myctr--)
  131.   {
  132.   }
  133.   
  134.   //printf("ePHY Ready nr");
  135. }
  136. /********************************************************************/
  137. void SYSTEM_SysInit (void)
  138. {
  139. /*******************************************************
  140. * Out of reset, the low-level assembly code calls this 
  141. * routine to initialize the MCF52233 modules for the  
  142. * M52233DEMO board. 
  143. ********************************************************/
  144.   /* 
  145.    * Allow interrupts from ABORT, SW1, SW2, and SW3 (IRQ[1,4,7,11]) 
  146.    */
  147.    
  148.   /* Enable IRQ signals on the port */
  149.   MCF_GPIO_PNQPAR = 0
  150.       | MCF_GPIO_PNQPAR_IRQ1_IRQ1
  151.       | MCF_GPIO_PNQPAR_IRQ4_IRQ4
  152.       | MCF_GPIO_PNQPAR_IRQ7_IRQ7;
  153.   
  154.   MCF_GPIO_PGPPAR = 0
  155.       | MCF_GPIO_PGPPAR_IRQ11_IRQ11;
  156.   
  157.   /* Set EPORT to look for rising edges */
  158.   MCF_EPORT0_EPPAR = 0
  159.       | MCF_EPORT_EPPAR_EPPA1_RISING
  160.       | MCF_EPORT_EPPAR_EPPA4_RISING
  161.       | MCF_EPORT_EPPAR_EPPA7_RISING;
  162.       
  163.   MCF_EPORT1_EPPAR = 0
  164.       | MCF_EPORT_EPPAR_EPPA11_RISING;
  165.       
  166.   /* Clear any currently triggered events on the EPORT  */
  167.   MCF_EPORT0_EPIER = 0
  168.       | MCF_EPORT_EPIER_EPIE1
  169.       | MCF_EPORT_EPIER_EPIE4
  170.       | MCF_EPORT_EPIER_EPIE7;
  171.      
  172.   MCF_EPORT1_EPIER = 0
  173.       | MCF_EPORT_EPIER_EPIE11;
  174.      
  175.   /* Enable interrupts in the interrupt controller */
  176.   MCF_INTC0_IMRL &= ~(0
  177.       | MCF_INTC_IMRL_INT_MASK1 
  178.       | MCF_INTC_IMRL_INT_MASK4 
  179.       | MCF_INTC_IMRL_INT_MASK7 
  180.       | MCF_INTC_IMRL_MASKALL);
  181.   MCF_INTC1_IMRH &= ~(0
  182.       | MCF_INTC_IMRH_INT_MASK35);
  183.         
  184. MCF_INTC1_ICR35 = MCF_INTC_ICR_IL(4);
  185. MCF_GPIO_PDDPAR = 0x0F;
  186. /* Set real time clock freq */
  187. MCF_CLOCK_RTCDR = 25000000;
  188. /* Call MCF5xxx startup copy function */
  189.     mcf5xxx_startup();
  190. mcf52233_wtm_init();
  191. mcf52233_pll_init();
  192. mcf52233_scm_init();
  193. #if UART_SUPPORT==1 
  194. uart_init(0,SYSTEM_CLOCK, TERMINAL_BAUD, 0);
  195. #endif
  196. mcf52233_gpio_init();
  197. /* Turn Instruction Cache ON */
  198. mcf5xxx_wr_cacr(0
  199. | MCF5XXX_CACR_CENB
  200. | MCF5XXX_CACR_CINV
  201. | MCF5XXX_CACR_DISD
  202. | MCF5XXX_CACR_CEIB
  203. | MCF5XXX_CACR_CLNF_00);
  204. }