📄 bsp.c
字号:
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#define BSP_GLOBALS
#include <includes.h>
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
CPU_INT32U VIC_SpuriousInt;
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void LED_Init (void);
static void BSP_IO_Init (void);
static void BSP_PLL_Init (void);
static void VIC_Init (void);
static void VIC_Dummy (void);
static void VIC_DummyWDT (void);
static void VIC_DummyTIMER0(void);
static void VIC_DummyTIMER1(void);
static void VIC_DummyUART0 (void);
static void VIC_DummyUART1 (void);
static void VIC_DummyPWM0 (void);
static void VIC_DummyI2C (void);
static void VIC_DummySPI (void);
static void VIC_DummyRTC (void);
static void VIC_DummyEINT0 (void);
static void VIC_DummyEINT1 (void);
static void VIC_DummyEINT2 (void);
static void Tmr_TickInit (void);
static void LCD_WriteCommand3(CPU_INT08U cmd, CPU_INT08U dat1, CPU_INT08U dat2);
static void LCD_WriteCommand1(CPU_INT08U cmd);
static void LCD_Command_Data_OK(void);
static void LCD_NormalWrite_Data(CPU_INT08U data);
/*
*********************************************************************************************************
* BSP_Init()
*
* Description : Initialize the Board Support Package (BSP).
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Note(s) : (1) This function SHOULD be called before any other BSP function is called.
*********************************************************************************************************
*/
void BSP_Init (void)
{
BSP_PLL_Init(); /* Initialize PLL0 and the VPB Divider Register */
BSP_IO_Init(); /* Initialize the board's I/Os */
VIC_Init(); /* Initialize the Vectored Interrupt Controller */
LED_Init(); /* Initialize the LED controls */
Tmr_TickInit(); /* Initialize the uC/OS-II tick interrupt */
}
/*
*********************************************************************************************************
* BSP_CPU_ClkFreq()
*
* Description : Get the CPU clock frequency.
*
* Argument(s) : none.
*
* Return(s) : The CPU clock frequency, in Hz.
*********************************************************************************************************
*/
CPU_INT32U BSP_CPU_ClkFreq (void)
{
CPU_INT32U msel;
CPU_INT32U cpu_clk_freq;
msel = (CPU_INT32U)(PLLCFG & 0x1F);
cpu_clk_freq = CPU_OSC_FREQ * (msel + 1);
return (cpu_clk_freq);
}
/*
*********************************************************************************************************
* BSP_CPU_PclkFreq()
*
* Description : Get the peripheral clock frequency.
*
* Argument(s) : none.
*
* Return(s) : The peripheral clock frequency, in Hz.
*********************************************************************************************************
*/
CPU_INT32U BSP_CPU_PclkFreq (void)
{
CPU_INT32U msel;
CPU_INT32U vpbdiv;
CPU_INT32U clk_freq;
CPU_INT32U pclk_freq;
msel = (CPU_INT32U)(PLLCFG & 0x1F);
clk_freq = CPU_OSC_FREQ * (msel + 1);
vpbdiv = (CPU_INT32U)(VPBDIV & 0x03);
switch (vpbdiv) {
case 0:
pclk_freq = clk_freq / 4;
break;
case 1:
pclk_freq = clk_freq;
break;
case 2:
pclk_freq = clk_freq / 2;
break;
default:
pclk_freq = clk_freq / 4;
break;
}
return (pclk_freq);
}
/*
*********************************************************************************************************
* OS_CPU_ExceptHndlr()
*
* Description : Handle any exceptions.
*
* Argument(s) : except_id ARM exception type:
*
* OS_CPU_ARM_EXCEPT_RESET 0x00
* OS_CPU_ARM_EXCEPT_UNDEF_INSTR 0x01
* OS_CPU_ARM_EXCEPT_SWI 0x02
* OS_CPU_ARM_EXCEPT_PREFETCH_ABORT 0x03
* OS_CPU_ARM_EXCEPT_DATA_ABORT 0x04
* OS_CPU_ARM_EXCEPT_ADDR_ABORT 0x05
* OS_CPU_ARM_EXCEPT_IRQ 0x06
* OS_CPU_ARM_EXCEPT_FIQ 0x07
*
* Return(s) : none.
*
* Caller(s) : OS_CPU_ARM_EXCEPT_HANDLER(), which is declared in os_cpu_a.s.
*********************************************************************************************************
*/
void OS_CPU_ExceptHndlr (CPU_INT32U except_id)
{
CPU_FNCT_VOID pfnct;
if (except_id == OS_CPU_ARM_EXCEPT_IRQ) {
pfnct = (CPU_FNCT_VOID)VICVectAddr; /* Read the interrupt vector from the VIC */
//while (pfnct != (CPU_FNCT_VOID)0) { /* Make sure we don't have a NULL pointer,to handle all the interrupt */
(*pfnct)(); /* Execute the ISR for the interrupting device */
VICVectAddr = 0; /* Acknowlege the VIC interrupt update remain interrupt,vale don't care */
//pfnct = (CPU_FNCT_VOID)VICVectAddr; /* Read the interrupt vector from the VIC */
//}
} else {
/* Infinite loop on other exceptions. */
/* Should be replaced by other behavior (reboot, etc.) */
while (DEF_TRUE) {
;
}
}
}
/*
*********************************************************************************************************
* Tmr_TickInit()
*
* Description : Initialize uC/OS-II's tick source.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
static void Tmr_TickInit (void)
{
CPU_INT32U pclk_freq;
CPU_INT32U tmr_reload;
/* VIC TIMER #0 Initialization */
VICIntSelect &= ~(1 << VIC_TIMER0); /* Timer0 interrupt is the IRQ,not FIQ */
VICVectAddr2 = (CPU_INT32U)Tmr_TickISR_Handler; /* Set the vector address */
VICVectCntl2 = 0x20 | VIC_TIMER0; /* Enable vectored interrupts */
VICIntEnable = (1 << VIC_TIMER0); /* Enable Interrupts */
pclk_freq = BSP_CPU_PclkFreq();
tmr_reload = pclk_freq / OS_TICKS_PER_SEC;
T0TCR = 0; /* Disable timer 0. */
T0PC = 0; /* Prescaler is set to no division. */
T0MR0 = tmr_reload;
T0MCR = 3; /* Interrupt on MR0 (reset TC) */
T0CCR = 0; /* Capture is disabled. */
T0EMR = 0; /* No external match output. */
T0TCR = 1; /* Enable timer 0 */
}
/*
*********************************************************************************************************
* Tmr_TickISR_Handler()
*
* Description : Handle the timer interrupt that is used to generate TICKs for uC/OS-II.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
void Tmr_TickISR_Handler (void)
{
T0IR = 0xFF; /* Clear timer #0 interrupt */
OSTimeTick(); /* Call uC/OS-II's OSTimeTick() */
}
/*
*********************************************************************************************************
* BSP_IntDisAll()
*
* Description : Disable ALL interrupts.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
void BSP_IntDisAll (void)
{
VICIntEnClr = 0xFFFFFFFFL; /* Disable ALL interrupts */
}
/*
*********************************************************************************************************
*********************************************************************************************************
** uC/LCD FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -