📄 bsp.c
字号:
clk_div = 5; /* Configure the ARM Core clock div to 6. CCLKSEL = 6 - 1 */
clk_div_usb = 5; /* Configure the USB clock divider to 6, USBSEL = 6 - 1 */
if ((PLLSTAT & (1 << 25)) > 0) { /* If the PLL is already running */
CPU_CRITICAL_ENTER();
PLLCON &= ~(1 << 1); /* Disconnect the PLL */
PLLFEED = 0xAA; /* PLL register update sequence, 0xAA, 0x55 */
PLLFEED = 0x55;
CPU_CRITICAL_EXIT();
}
CPU_CRITICAL_ENTER();
PLLCON &= ~(1 << 0); /* Disable the PLL */
PLLFEED = 0xAA; /* PLL register update sequence, 0xAA, 0x55 */
PLLFEED = 0x55;
CPU_CRITICAL_EXIT();
SCS &= ~(1 << 4); /* OSCRANGE = 0, Main OSC is between 1 and 20 Mhz */
SCS |= (1 << 5); /* OSCEN = 1, Enable the main oscillator */
while ((SCS & (1 << 6)) == 0) { /* Wait until OSCSTAT is set (Main OSC ready to be used) */
;
}
CLKSRCSEL = (1 << 0); /* Select main OSC, 12MHz, as the PLL clock source */
CPU_CRITICAL_ENTER();
PLLCFG = (m << 0) | (n << 16); /* Configure the PLL multiplier and divider */
PLLFEED = 0xAA; /* PLL register update sequence, 0xAA, 0x55 */
PLLFEED = 0x55;
CPU_CRITICAL_EXIT();
CPU_CRITICAL_ENTER();
PLLCON |= (1 << 0); /* Enable the PLL */
PLLFEED = 0xAA; /* PLL register update sequence, 0xAA, 0x55 */
PLLFEED = 0x55;
CPU_CRITICAL_EXIT();
CCLKCFG = clk_div; /* Configure the ARM Core Processor clock divider */
USBCLKCFG = clk_div_usb; /* Configure the USB clock divider */
while ((PLLSTAT & (1 << 26)) == 0) { /* Wait for PLOCK to become set */
;
}
PCLKSEL0 = 0xAAAAAAAA; /* Set peripheral clocks to be half of main clock */
PCLKSEL1 = 0x22AAA8AA;
CPU_CRITICAL_ENTER();
PLLCON |= (1 << 1); /* Connect the PLL. The PLL is now the active clock source */
PLLFEED = 0xAA; /* PLL register update sequence, 0xAA, 0x55 */
PLLFEED = 0x55;
CPU_CRITICAL_EXIT();
while ((PLLSTAT & (1 << 25)) == 0) { /* Wait PLLC, the PLL connect status bit to become set */
;
}
}
/*
*********************************************************************************************************
* MAM_Init()
*
* Description : This function initializes the Memory Acceleration Module
*
* Arguements : None
*
* Returns : None
*********************************************************************************************************
*/
static void MAM_Init (void)
{
CPU_INT32U clk_freq;
clk_freq = BSP_CPU_ClkFreq(); /* Get the current core clock frequency */
MAMCR = 0; /* Disable MAM functionality */
if (clk_freq < 20000000) { /* Compare current clock frequency with MAM modes */
MAMTIM = 1; /* Set MAM fetch cycles to 1 processor clock in duration */
}
if (clk_freq < 40000000) {
MAMTIM = 2; /* Set MAM fetch cycles to 2 processor clock in duration */
}
if (clk_freq >= 40000000) {
MAMTIM = 3; /* Set MAM fetch cycles to 3 processor clock in duration */
}
MAMCR = 2; /* Enable full MAM functionality */
}
/*
*********************************************************************************************************
* INITIALIZE I/Os
*
* Description : This function consolidates the I/O initialization for various modules.
*
* Arguements : None
*
* Returns : None
*
* Note(s) : (1) Refer to the LPC2468 User Manual for a detailed pin assignment
*********************************************************************************************************
*/
static void GPIO_Init (void)
{
CPU_INT32U pinsel;
IO0DIR = 0;
IO1DIR = 0;
FIO0DIR = 0;
FIO1DIR = 0;
FIO2DIR = 0;
FIO3DIR = 0;
FIO4DIR = 0;
FIO0MASK = 0;
FIO1MASK = 0;
FIO2MASK = 0;
FIO3MASK = 0;
FIO4MASK = 0;
PINSEL0 = 0;
PINSEL1 = 0;
PINSEL2 = 0;
PINSEL3 = 0;
PINSEL4 = 0;
PINSEL5 = 0;
PINSEL6 = 0;
PINSEL7 = 0;
PINSEL8 = 0;
PINSEL9 = 0;
PINSEL10 = 0;
#if (OS_VIEW_MODULE > 0) && (OS_VIEW_COMM_SEL == OS_VIEW_UART_0)
/* Configure P3.16 & P3.17 for UART1 */
pinsel = PINSEL7;
pinsel &= 0xFFFFFFF0;
pinsel |= 0x0000000F;
PINSEL7 = pinsel;
#endif
#if (OS_VIEW_MODULE > 0) && (OS_VIEW_COMM_SEL == OS_VIEW_UART_1)
/* Configure P3.16 & P3.17 for UART1 */
pinsel = PINSEL7;
pinsel &= 0xFFFFFFF0;
pinsel |= 0x0000000F;
PINSEL7 = pinsel;
#endif
/* Configure P0.28 & P0.27 for I2C0 */
pinsel = PINSEL1;
pinsel &= 0xFC3FFFFF;
pinsel |= 0x01400000;
PINSEL1 = pinsel;
/* Configure P2.10 for GPIO */
pinsel = PINSEL4;
pinsel &= 0xFFCFFFFF;
PINSEL4 = pinsel;
FIO2DIR &= ~DEF_BIT_10;
FIO3DIR = GPIO3_LCD_LIGHT;
FIO3CLR = GPIO3_LCD_LIGHT;
}
/*
*********************************************************************************************************
* VIC_Init()
*
* Description : This function initializes the Vectored Interrupt Controller
*
* Arguements : None
*
* Returns : None
*
* Notes : None
*********************************************************************************************************
*/
static void VIC_Init (void)
{
VICIntEnClear = 0xFFFFFFFF; /* Disable ALL interrupts */
VICAddress = 0; /* Acknowlege any pending VIC interrupt */
VICProtection = 0; /* Allow VIC register access in User of Priviledged modes */
VICVectAddr0 = (CPU_INT32U)VIC_DummyWDT; /* Set the vector address */
VICVectAddr1 = (CPU_INT32U)VIC_DummySW;
VICVectAddr2 = (CPU_INT32U)VIC_DummyDEBUGRX;
VICVectAddr3 = (CPU_INT32U)VIC_DummyDEBUGTX;
VICVectAddr4 = (CPU_INT32U)VIC_DummyTIMER0;
VICVectAddr5 = (CPU_INT32U)VIC_DummyTIMER1;
VICVectAddr6 = (CPU_INT32U)VIC_DummyUART0;
VICVectAddr7 = (CPU_INT32U)VIC_DummyUART1;
VICVectAddr8 = (CPU_INT32U)VIC_DummyPWM01;
VICVectAddr9 = (CPU_INT32U)VIC_DummyI2C0;
VICVectAddr10 = (CPU_INT32U)VIC_DummySPI;
VICVectAddr11 = (CPU_INT32U)VIC_DummySSP1;
VICVectAddr12 = (CPU_INT32U)VIC_DummyPLL;
VICVectAddr13 = (CPU_INT32U)VIC_DummyRTC;
VICVectAddr14 = (CPU_INT32U)VIC_DummyEINT0;
VICVectAddr15 = (CPU_INT32U)VIC_DummyEINT1;
VICVectAddr16 = (CPU_INT32U)VIC_DummyEINT2;
VICVectAddr17 = (CPU_INT32U)VIC_DummyEINT3;
VICVectAddr18 = (CPU_INT32U)VIC_DummyAD0;
VICVectAddr19 = (CPU_INT32U)VIC_DummyI2C1;
VICVectAddr20 = (CPU_INT32U)VIC_DummyBOD;
VICVectAddr21 = (CPU_INT32U)VIC_DummyETHERNET;
VICVectAddr22 = (CPU_INT32U)VIC_DummyUSB;
VICVectAddr23 = (CPU_INT32U)VIC_DummyCAN01;
VICVectAddr24 = (CPU_INT32U)VIC_DummyMMC;
VICVectAddr25 = (CPU_INT32U)VIC_DummyGP_DMA;
VICVectAddr26 = (CPU_INT32U)VIC_DummyTIMER2;
VICVectAddr27 = (CPU_INT32U)VIC_DummyTIMER3;
VICVectAddr28 = (CPU_INT32U)VIC_DummyUART2;
VICVectAddr29 = (CPU_INT32U)VIC_DummyUART3;
VICVectAddr30 = (CPU_INT32U)VIC_DummyI2C2;
VICVectAddr31 = (CPU_INT32U)VIC_DummyI2S;
}
/*
******************************************************************************************************************************
******************************************************************************************************************************
** DUMMY INTERRUPT HANDLERS
******************************************************************************************************************************
******************************************************************************************************************************
*/
static void VIC_Dummy (void)
{
while (1) {
(void)VIC_SpuriousInt;
}
}
static void VIC_DummyWDT (void)
{
VIC_SpuriousInt = VIC_WDT;
VIC_Dummy();
}
static void VIC_DummySW (void)
{
VIC_SpuriousInt = VIC_SW;
VIC_Dummy();
}
static void VIC_DummyDEBUGRX (void)
{
VIC_SpuriousInt = VIC_DEBUGRX;
VIC_Dummy();
}
static void VIC_DummyDEBUGTX (void)
{
VIC_SpuriousInt = VIC_DEBUGTX;
VIC_Dummy();
}
static void VIC_DummyTIMER0 (void)
{
VIC_SpuriousInt = VIC_TIMER0;
VIC_Dummy();
}
static void VIC_DummyTIMER1 (void)
{
VIC_SpuriousInt = VIC_TIMER1;
VIC_Dummy();
}
static void VIC_DummyUART0 (void)
{
VIC_SpuriousInt = VIC_UART0;
VIC_Dummy();
}
static void VIC_DummyUART1 (void)
{
VIC_SpuriousInt = VIC_UART1;
VIC_Dummy();
}
static void VIC_DummyPWM01 (void)
{
VIC_SpuriousInt = VIC_PWM01;
VIC_Dummy();
}
static void VIC_DummyI2C0 (void)
{
VIC_SpuriousInt = VIC_I2C0;
VIC_Dummy();
}
static void VIC_DummySPI (void)
{
VIC_SpuriousInt = VIC_SPI;
VIC_Dummy();
}
static void VIC_DummySSP1 (void)
{
VIC_SpuriousInt = VIC_SSP1;
VIC_Dummy();
}
static void VIC_DummyPLL (void)
{
VIC_SpuriousInt = VIC_PLL;
VIC_Dummy();
}
static void VIC_DummyRTC (void)
{
VIC_SpuriousInt = VIC_RTC;
VIC_Dummy();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -