📄 bsp.c
字号:
/**********************************************************************************************************
*
* 目标板程序包
*
* NXP LPC2214
* on the
*
* 文件名: bsp.c
* 版本 : V1.00
* 程序员: 王志辉
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 包含路径
*********************************************************************************************************
*/
#define BSP_GLOBALS
#include <includes.h>
/*
*********************************************************************************************************
* 本地宏定义
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 本地常量
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 本地数据类型
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 本地表格
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 本地全局变量
*********************************************************************************************************
*/
CPU_INT32U VIC_SpuriousInt;
/*
*********************************************************************************************************
* 本地函数原型
*********************************************************************************************************
*/
static void BSP_PLL_Init (void);//锁相环初始化
static void BSP_IO_Init (void);//IO口初始化
//static void BSP_MAM_Init (void);
static void Tmr_TickInit (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_DummyRTC (void);
//static void VIC_DummyEINT0 (void);
//static void VIC_DummyEINT1 (void);
//static void VIC_DummyEINT2 (void);
/*
*********************************************************************************************************
* 本地错误配置
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
** 本地函数代码
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* BSP_Init()
*
* 描 述: 初始化实验板使其支持BSP程序包
*
* 入口参数: 无
*
* 返回参数: 无
*
* 注意事项: 这个函数应该在调用BSP函数包中的其他函数前调用
*********************************************************************************************************
*/
void BSP_Init (void)
{
// #ifdef __DEBUG
// MEMMAP = 0x3; //remap
// #endif
// #ifdef __OUT_CHIP
// MEMMAP = 0x3; //remap
// #endif
// #ifdef __IN_CHIP
// MEMMAP = 0x1; //remap
// #endif
OS_CPU_InitExceptVect(); /*初始化默认的中断向量*/
BSP_PLL_Init(); /* 初始化锁相环PLL和VPB分屏器*/
// BSP_MAM_Init(); /* 初始化存储器加速模块*/
BSP_IO_Init(); /* 初始化IO引脚*/
VIC_Init(); /*初始化向量中断控制器*/
// LED_Init(); /*初始化指示灯控制*/
// ADC_Init(); /*初始化ADC控制*/
Tmr_TickInit(); /* 初始化uC/OS-II的节拍生成器*/
}
/*
*********************************************************************************************************
* BSP_CPU_ClkFreq()
*
* 功能描述: 得到CPU的时钟频率
*
* 入口参数: 无
*
* 返回参数: CPU的时钟频率单位为HZ
*********************************************************************************************************
*/
CPU_INT32U BSP_CPU_ClkFreq (void)
{
CPU_INT32U msel;
CPU_INT32U cpu_clk_freq;
msel = (CPU_INT32U)(PLLCFG & 0x1F);/*得到(PLL倍频-1的)值*/
cpu_clk_freq = Fosc * (msel + 1); /*倍频乘以晶振频率得到主频值*/
return (cpu_clk_freq); /*返回主频值*/
}
/*
*********************************************************************************************************
* BSP_CPU_PclkFreq()
* 功能描述: 得到CPU外设的时钟频率
*
* 入口参数: 无
*
* 返回参数: CPU外设的时钟频率单位为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 = Fosc * (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()
* 功能描述: 处理所有异常
* 入口参数: except_id ARM异常的种类:
*
* 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
* 入口参数: 无
*
* 返回参数: CPU外设的时钟频率单位为HZ
* 调用模块: 声明在os_cpu_a.s中的OS_CPU_ARM_EXCEPT_HANDLER()
*********************************************************************************************************
*/
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; /*从VIC读取中断向量*/
while (pfnct != (CPU_FNCT_VOID)0) { /* 确保没有空指针*/
(*pfnct)(); /* 为申请中断的设备执行中断程序*/
VICVectAddr = 1; /* 通知中断结束*/
pfnct = (CPU_FNCT_VOID)VICVectAddr; /* 从VIC读取中断向量*/
}
} else {
/* 无限循环等待其他中断*/
/* 这里应该增加其他功能如(reboot等等) */
while (DEF_TRUE) {
;
}
}
}
/*
*********************************************************************************************************
* BSP_IntDisAll()
*
* 功能描述: 禁止所有中断
*
* 入口参数: 无
*
* 返回参数: 无
*********************************************************************************************************
*/
void BSP_IntDisAll (void)
{
VICIntEnClear = 0xFFFFFFFFL; /*禁止所有中断*/
}
/*
*********************************************************************************************************
*********************************************************************************************************
** 目标板测试程序待加入
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
** uC/OS-II 定时器函数
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* Tmr_TickInit()
*
* 功能描述: 初始化uC/OS-II的节拍发生器
*
* 入口参数: 无
*
* 返回参数: 无
*********************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -