⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdac_init.c

📁 hi everybody enjoy hi everybody enjoy hi everybody enjoy hi everybody enjoy hi everybody enjoy hi ev
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************
 file ID                    	:CDAC_init.c
 Version Number           	:
 Project Code                	:
 Project Name               	:
 Architect    			:ProjectLeader
 Designer     			:
 Author                     	:  
 Date of last updation     	:02-04-2009
 Description             	: 

************************************************************************/
#include "CDAC_uart_tr.h" 
#define BAUD_RATE 115200
#define BSP_RAM_REMAP_TEST_BYTE             (*(CPU_INT08U  *)0x00000030L)

  #define  BSP_GPIOA_RXD0                     DEF_BIT_00          /* UART0 (A): COM PORT 0 */
  #define  BSP_GPIOA_TXD0                     DEF_BIT_01          /* UART0 (A): COM PORT 0 */
  #define  BSP_GPIOA_RTS0                     DEF_BIT_03          /* UART0 (A): COM PORT 0 */
  #define  BSP_GPIOA_CTS0                     DEF_BIT_04          /* UART0 (A): COM PORT 0 */

  #define  BSP_GPIOA_DRXD                     DEF_BIT_27          /* DBGU  (A): Debug Port  */
  #define  BSP_GPIOA_DTXD                     DEF_BIT_28          /* DBGU  (A): Debug Port  */
  #define  BSP_GPIOA_RXD0                     DEF_BIT_00          /* UART0 (A): Debug Port  */
  #define  BSP_GPIOA_TXD0                     DEF_BIT_01          /* UART0 (A): Debug Port   */  
  
  #define  BSP_GPIOA_DBG                     (BSP_GPIOA_DRXD      |\
                                            BSP_GPIOA_DTXD)
  #define  BSP_GPIOA_UART0                   (BSP_GPIOA_RXD0      |\
                                            BSP_GPIOA_TXD0)


void  IntDisAll(void);             //defined 

static  void  PLL_Init(void);      //defined
static  void  IntCtrlInit(void);   //defined

static  void  DummyISR_Handler(void);   //defined
void  UART_Init(CPU_INT32U baud_rate);  //defined 
CPU_INT32U  GET_CPU_ClkFreq (void);     //defined

//void  UART_WrByte(CPU_INT08U tx_byte);  //declared in CDAC_uart_tr.h
//void  init_all(void);           //declared in CDAC_uart_tr.h

//CPU_INT08U  UART_RdByte(void);

/*----------------------------------------------------------------------------*/
void  IntDisAll (void)
{
    AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;                      /* Disable all interrupts */
}
/*----------------------------------------------------------------------------*/
void  init_all(void)
{
    unsigned  int br = BAUD_RATE;                               /*The selected baud rate*/
    
    AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;              /* Disable the Watchdog Timer*/
    AT91C_BASE_RSTC->RSTC_RMR |= (CPU_INT32U)(0xA5 << 24) | AT91C_RSTC_URSTEN;/* Enable the hardware reset button*/    
    
    PLL_Init();
    IntCtrlInit();
    UART_Init(br);
    CPU_SR_INT_En();
}
/*----------------------------------------------------------------------------*/
static  void  PLL_Init(void)
{
                                                                 /* ----------------- SET FLASH WAIT STATES ---------------- */
                                                                /* Set the number of flash wait states to 2                 */
    AT91C_BASE_MC->MC_FMR      |= (1 << 8);                     /* Since we are running > 30mhz out of flash                */

                                                                /* -------------------- SETUP CPU CLOCK ------------------- */
                                                                /* Enable the Main Oscillator                               */
    AT91C_BASE_PMC->PMC_MOR   = AT91C_CKGR_OSCOUNT | AT91C_CKGR_MOSCEN;

                                                                /* Wait for the Main Oscillator to start up                 */
    while ((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS) == 0) {
        ;
    }

    AT91C_BASE_PMC->PMC_PLLR  = 0x207C3F0C;                     /* Enable and set PLL                                       */
                                                                /* [07:00]  Divider     = 12                                */
                                                                /* [13:08]  PLL Count   = 63 slow clocks                    */
                                                                /* [26:16]  Multiplier  = (124 + 1) = 125                   */
                                                                /* [29:28]  USB Divider = 2                                 */
                                                                /* ===> MCLK   = 18432000 * 125 / 4 = 192 MHz               */
                                                                /* ===> USBCLK = MCLK / 4           =  48 MHz               */

                                                                /* Wait for the PLL to start up                             */
    while ((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK) == 0) {
        ;
    }

    while((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) == 0) {
        ;
    }
                                                                /* Main Clock will be equal to 1/4 of the PLL Clock         */
    AT91C_BASE_PMC->PMC_MCKR  =  AT91C_PMC_PRES_CLK_4;

    while((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) == 0) {
        ;
    }
                                                                /* Specify the PLL Clock as the source of the Main Clock    */
    AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;

    while((AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) == 0) {
        ;
    }  
}
/*---------------------------------------------------------------------------------------------------*/
static  void  IntCtrlInit (void)
{
    CPU_INT16U  i;


    BSP_RAM_REMAP_TEST_BYTE = 0xAA;                             /* Write a byte to RAM                                      */

    #ifndef  RAM_REMAPPED
        if (BSP_RAM_REMAP_TEST_BYTE == 0xAA) {                      // Check if the write to RAM worked       
            AT91C_BASE_MC->MC_RCR =  1;                             // If so, toggle REMAP register  
    #else                                                           //--------------BEGIN CODE RUNNING OUT OF RAM
        OS_CPU_InitExceptVect();
    #endif                                                          //---------------END CODE RUNNING OUT OF RAM
    
    AT91C_BASE_AIC->AIC_EOICR =  0x00000000;                    /* End-of-interrupt command                                 */

    for (i = 0; i < 32; i++) {                                  /* Disable all ISRs                                         */
        AT91C_BASE_AIC->AIC_SVR[i] = (CPU_INT32U)DummyISR_Handler;
        AT91C_BASE_AIC->AIC_SMR[i] = 0;
    }
}
/*------------------------------------------------------------------------------*/
static  void  DummyISR_Handler (void)
{
    CPU_INT32U  irq_id;
    irq_id                   = AT91C_BASE_AIC->AIC_ISR & 0x1F;  /* Retrieve the ID of the interrupting source           */
    AT91C_BASE_AIC->AIC_ICCR =  (1 << irq_id);                  /* Clear the current interrupt                          */
    AT91C_BASE_AIC->AIC_IVR  = 0;                               /* Debug variant of vector read (protect mode is used)  */
}
/*-------------------------------------------------------------------------------*/
void  UART_Init(CPU_INT32U baud_rate)
{
   
    CPU_INT32U  pclk_freq;


    pclk_freq                  = GET_CPU_ClkFreq();             /* Get the UART input clock frequency                       */

//#if (BSP_CFG_SER_COMM_SEL == BSP_SER_COMM_UART_DBG)    
    AT91C_BASE_PIOA->PIO_PDR  |= BSP_GPIOA_DBG;                 /* Set GPIOA pins 9 and 10 as DBGU UART pins                */
    AT91C_BASE_PIOA->PIO_ASR  |= BSP_GPIOA_DBG;                 /* Select GPIOA attached peripheral (DBGU)                  */

    AT91C_BASE_DBGU->DBGU_IDR  = AT91C_US_RXRDY                 /* Disable Rx interrupts                                    */
                               | AT91C_US_TXRDY;                /* Disable Tx interrupt                                     */

    AT91C_BASE_DBGU->DBGU_CR   = AT91C_US_RXEN                  /* Enable the receiver                                      */
                               | AT91C_US_TXEN;                 /* Enable the transmitter                                   */

    AT91C_BASE_DBGU->DBGU_MR   = AT91C_US_USMODE_NORMAL         /* Normal mode selected                                     */
                               | AT91C_US_PAR_NONE;             /* No parity bit selected                                   */

                                                                /* Set the DBGU baud rate                                   */
    AT91C_BASE_DBGU->DBGU_BRGR = (CPU_INT16U)((pclk_freq) /baud_rate / 16);

    AT91C_BASE_PMC->PMC_PCER   = (1 << AT91C_ID_SYS);           /* Enable the DBGU peripheral clock                         */
//#endif

//#if (BSP_CFG_SER_COMM_SEL == BSP_SER_COMM_UART_UART_00)    
                                                                /* Set GPIOA pins 0 & 1 as US0 pins                         */
    AT91C_BASE_PIOA->PIO_PDR   = BSP_GPIOA_UART0;
    AT91C_BASE_PIOA->PIO_PDR   = BSP_GPIOA_UART0;

                                                                /* ---------------------- SETUP US0 ----------------------- */
    AT91C_BASE_US0->US_IDR     = AT91C_US_RXRDY                 /* Disable Rx interrupts                                    */
                               | AT91C_US_TXRDY;                /* Disable Tx interrupt                                     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -