📄 target.c.bak
字号:
/*
;************************************************************************************************************
;* 江西师范大学理电学院创新中心
;*
;* 创新研发小组
;*--------------------------------------------- 文件信息 -----------------------------------------------------
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;*
;* 文件名称 : target.c
;* 文件功能 : 该文件为S3C44B0硬件平台配置具体函数的初始化。
;* 补充说明 :
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : zhouhong
;* 修改日期 : 2007/01/20
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : zhouhong
;* 创建日期 : 2006/04/20
;* 版本声明 : V1.0.1
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
#include "..\INC\target.h"
#include "..\INC\44blib.h"
#include "..\..\Uart_driver\inc\Uart_driver.h"
#include "..\..\UCOSII\INC\includes.h"
#include "..\..\Application\inc\sysConfig.h"
/*
*************************************************************************************************************
-
- 程序段说明 : 以下函数为各异常模式服务子程序。设成死循环是为调试用,
- 一旦发生此类异常,程序便跳入异常模式服务
- 子程序,终止程序运行。
*************************************************************************************************************
*/
void DebugUNDEF(void) //未定义
{
Uart_Printf("the programm is Enter Undefed");
while(1);
}
void DebugSWI(void) //软中断
{
Uart_Printf("the programm is Enter SWI");
while(1);
}
void BreakPoint(void) //预取指中止
{
#if SYS_DEBUG
Uart_Printf("the programm is Enter break point.");
Uart_Printf("\nINTMSK:Address=%x,Value=%x",&rINTMSK,rINTMSK);
Uart_Printf("\nClear before INTPND:Address=%x,Value=%x",&rINTPND,rINTPND);
rI_ISPC=rINTPND;
Uart_Printf("\nClear after INTPND:Address=%x,Value=%x",&rINTPND,rINTPND);
#endif
while(1);
}
void DebugABORT(void) //数据中止
{
Uart_Printf("the programm is Enter abort");
while(1);
}
void DebugFIQ(void) //快中断
{
Uart_Printf("the programm is Enter FIQ");
while(1);
}
/*
*************************************************************************************************************
-
- 程序段说明 : 以下函数均为初始化函数
-
*************************************************************************************************************
*/
/*
*************************************************************************************************************
- 函数名称 : SysIntInit(void)
- 函数说明 : S3C44B0 中断控制器的初始化
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void SysIntInit(void)
{
//vectored,IRQ enable,FIQ disable
rINTCON=0x01;
/* All=IRQ mode */
rINTMOD=0x0;
/* All interrupt is masked. */
rINTMSK=0x7ffffff/*BIT_GLOBAL*/;
rI_ISPC=0x1ffffff; //清除所有中断标志位
//异常中断set interrupt vector routine
pISR_UNDEF = (unsigned) DebugUNDEF;
pISR_SWI = (unsigned) DebugSWI;
pISR_PABORT = (unsigned) DebugABORT;
pISR_DABORT = (unsigned) DebugABORT;
pISR_RESERVED = (unsigned) BreakPoint; //not used
pISR_FIQ = (unsigned) DebugFIQ;
pISR_ADC = (unsigned) BreakPoint;
pISR_RTC = (unsigned) BreakPoint;
pISR_UTXD1 = (unsigned) BreakPoint;
pISR_UTXD0 = (unsigned) BreakPoint;
pISR_SIO = (unsigned) BreakPoint;
pISR_IIC = (unsigned) BreakPoint;
pISR_URXD1 = (unsigned) BreakPoint;
pISR_URXD0 = (unsigned) BreakPoint;
pISR_TIMER5 = (unsigned) BreakPoint;
pISR_TIMER4 = (unsigned) BreakPoint;
pISR_TIMER3 = (unsigned) BreakPoint;
pISR_TIMER2 = (unsigned) BreakPoint;
pISR_TIMER1 = (unsigned) BreakPoint;
pISR_TIMER0 = (unsigned) BreakPoint;
pISR_UERR01 = (unsigned) BreakPoint;
pISR_WDT = (unsigned) BreakPoint;
pISR_BDMA1 = (unsigned) BreakPoint;
pISR_BDMA0 = (unsigned) BreakPoint;
pISR_ZDMA1 = (unsigned) BreakPoint;
pISR_ZDMA0 = (unsigned) BreakPoint;
pISR_TICK = (unsigned) BreakPoint;
pISR_EINT4567 = (unsigned) BreakPoint;
pISR_EINT3 = (unsigned) BreakPoint;
pISR_EINT2 = (unsigned) BreakPoint;
pISR_EINT1 = (unsigned) BreakPoint;
pISR_EINT0 = (unsigned) BreakPoint;
}
/*
*************************************************************************************************************
- 函数名称 : Cache_Init(void)
- 函数说明 : S3C44B0内部缓存的初始化程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Cache_Init(void)
{
rSYSCFG = SYSCFG_8KB; //使用8K字节的指令缓存,write buffer disable
rNCACHBE0 = 0xc0002000; //定义非Cache区,从0x2000000到0xbffffff,中断时进入ROM,若不允许CACHE不正常???
}
/*
*************************************************************************************************************
- 函数名称 : TargetInit(void)
- 函数说明 : 目标板初始化程序,主函数中只需调用此函数,即可完成目标板的初始化
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Target_Init(void)
{
Cache_Init();
ChangePllValue(PLL_M,PLL_P,PLL_S); //在44binit.s 中已经初始化
Port_Init();
Uart_Init(0,115200,0);
Uart_Init(0,115200,1);
Uart_Select(0);
#if SYS_DEBUG
Uart_Printf("\n硬件初始化...\n");
#endif
SysIntInit(); //S3c44b0 中断初始化
TargetSysTimeInit(); //系统时钟初始化
VIRQ_Relate_Task_Init();
#if SYS_DEBUG
Uart_Printf("硬件初始化完成\n");
#endif
OpenInterrupt(); //切换到系统模式下启动中断,在此之前都是关中断状态,在44binit.s中定义
}
/*
*************************************************************************************************************
- 函数名称 : C_IRQHandler(void)
- 函数说明 : 切进UCOS中的处理IRQ的被调程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void C_IRQHandler(void)
{
INT32U reg;
reg = rI_ISPR;
switch (reg)
{
case BIT_TIMER5: //系统时钟
OSTimeTick();
rI_ISPC = BIT_TIMER5; //清除节拍中断
break;
case BIT_EINT4567: //按键中断
IrqKey();
break;
default :
break;
}
}
/*
*************************************************************************************************************
- 函数名称 : VIRQ_Relate_task_Init(void)
- 函数说明 : 和任务调度相关的向量中断的初始化程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void VIRQ_Relate_Task_Init(void)
{
pISR_TIMER5=(unsigned)UCOS_IRQHandler; // UCOS_IRQHandler在OS_CPU_A.S中定义,在OS_CPU.H中声明
pISR_EINT4567=(unsigned)UCOS_IRQHandler; // UCOS_IRQHandler在OS_CPU_A.S中定义,在OS_CPU.H中声明
}
/*
*************************************************************************************************************
- 函数名称 : S3c_InitTimers(void)
- 函数说明 : 系统时钟节拍定时器5的初始化
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void TargetSysTimeInit(void)
{
#define Prescaler2 15
#define MUX5 0
#define Count MCLK/(2*Prescaler2)/OS_TICKS_PER_SEC
rTCON &= ~(0x07 << 24); // Stop Timer5.
rTCFG0 = (rTCFG0 & ~(0x0ff << 16)) | (Prescaler2 << 16);
rTCFG1 = (rTCFG1 & ~(0x0f << 20)) | (MUX5 << 20);
rTCNTB5 = Count;
rTCON |= (0x06 << 24); // 手动下载周期值,并设置为自动装载.
rTCON = (rTCON & ~(1 << 25)) | (1 << 24) ; // 启动.
}
/*
*************************************************************************************************************
- 函数名称 : TargetStart(void)
- 函数说明 : 启动系统打开时钟节拍定时器
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void TargetSysTimeStart(void)
{
rINTMSK &=(~(BIT_TIMER5|BIT_GLOBAL)); // Start system timer & enable the interrupt.
#if SYS_DEBUG
Uart_Printf("Starting target\n");
#endif
}
/*
*************************************************************************************************************
- 函数名称 : ShowLed(unsigned char ledStatus)
- 函数说明 : LED显示函数
- 输入参数 : ledStatus为显示的状态
- 输出参数 : 无
*************************************************************************************************************
*/
void ShowLed(unsigned char ledStatus)
{
LEDPort &= ~(LED0_ON | LED1_ON | LED2_ON); //LED全灭
LEDPort |=((ledStatus&0x07)<<1);
}
/*
*************************************************************************************************************
*- 结束文件 -*
*************************************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -