?? target.c
字號:
#include "target.h"
#include "ucos_ii.h" /* uC/OS interface */
extern OS_EVENT *Key_Mbox;
extern OS_EVENT *OK_Mbox;
//Function Declared********************
void TIMER2ISR(void);
void TIMER2ISR2(void);
//Function Declared end****************
/********************************************************************************************************
* 外部中斷4、5、6、7的中斷處理 *
********************************************************************************************************/
volatile char which_int=0;
void EInt4567Isr(void)
{
which_int = rEXTINTPND;
rEXTINTPND = 0xf; //clear EXTINTPND reg.
rI_ISPC |= BIT_EINT4567; //clear pending_bit
Delay(500); //延時若干個100us,消除抖動
rPCONG &= 0x00ff;
if( (rPDATG&0xf0) != 0xf0)
{
switch(which_int)
{
case 1:
{
OSMboxPost(Key_Mbox, (void *)4);
}
break;
case 2:
{
OSMboxPost(Key_Mbox, (void *)5);
}
break;
case 4:
{
OSMboxPost(OK_Mbox, (void *)6);
}
break;
case 8:
{
OSMboxPost(Key_Mbox, (void *)7);
}
break;
default :
break;
}
}
//while((rPDATG&0xf0) != 0xf0); //按鍵沒有松開就一直等待
rPCONG |= 0xff00; //GPG4、5、6、7設(shè)為中斷引腳
}
/********************************************************************************************************
* ARMTargetInit *
* *
* Description: This function initialize an ARM Target board *
* *
* Argument : none *
********************************************************************************************************/
void ARMTargetInit(void)
{
//配置Cache
rSYSCFG = SYSCFG_8KB ; //使用8K字節(jié)的指令緩存
rNCACHBE0=((unsigned int)(Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);
Port_Init(); //初始化端口
Delay( 200 ) ; //delay some time
Led_Set( 0x0f ); //LED全亮
Delay( 500 ) ; //delay some time
Led_Set( 0x00 ); //LED全亮
ChangePllValue( 58, 3, 1 ) ; //設(shè)置CPU頻率為66M
Uart_Init( 0, 115200 ); //設(shè)置串口0的速率為115200bps
Uart_Select(0); //選擇串口0
ARMInitInterrupts(); //初始化中斷,設(shè)置中斷服務(wù)程序
Delay(0); //調(diào)整延時
}
/********************************************************************************************************
* ARMTargetStart *
* *
* Description: This function start the ARM target running *
* *
* Argument : none *
********************************************************************************************************/
void ARMTargetStart(void) {
ARMInitTimers(); //配置時鐘0相關(guān)寄存器
ARMInstallSystemTimer(); //時鐘0中斷使能
}
/********************************************************************************************************
* 中斷初始化 *
********************************************************************************************************/
void ARMInitInterrupts(void)
{
// Non-vectored,IRQ disable,FIQ disable
rINTCON = 0x0 ;
// All=IRQ mode
rINTMOD = 0x0 ;
// All interrupt is masked.
rINTMSK = BIT_GLOBAL;
//test
Uart_Printf("\nIntInit Beforer,rI_ISPC=%4f\n",rI_ISPC);
rI_ISPC=0xFFFFFFFF; //clear all int pend
Uart_Printf("\nIntInit After,rI_ISPC=%4f\n",rI_ISPC);
//test
//set interrupt vector routine
// pISR_RESET //reserved
pISR_UNDEF = (unsigned) DebugUNDEF;
pISR_SWI = (unsigned) DebugSWI;
pISR_PABORT = (unsigned) DebugPABORT;
pISR_DABORT= (unsigned) DebugDABORT;
// pISR_RESERVED = (unsigned) BreakPoint; //not used
// pISR_IRQ = (unsigned) 0; //reserved
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) OSEINT4567ISR;
pISR_EINT3 = (unsigned) BreakPoint;
pISR_EINT2 = (unsigned) BreakPoint;
pISR_EINT1 = (unsigned) BreakPoint;
pISR_EINT0 = (unsigned) BreakPoint;
pISR_TIMER0 = (unsigned) OSTickISR;
pISR_TIMER2 = (unsigned) TIMER2ISR;
}
void TIMER2ISR2(void)
{
// Uart_Printf("\n\tEnter Timer2ISR...\n");
// rTCON |= 0x2000; //update Timer2
// rTCON = 0x9000; //
// Uart_Printf("\nrINTPND=0x%4x",rINTPND);
rI_ISPC = BIT_TIMER2; //clear Timer2 INTPND bit
// Uart_Printf("\nrINTPND=0x%4x",rINTPND);
// Uart_Printf("\nrTCON=0x%4x\n",rTCON);
// while(1);
}
//*******************************************************************************************************
int ARMRequestSystemTimer(void *tick, const unsigned char *str)
{
return 1;
}
/********************************************************************************************************
* Initialize timer that is used OS *
********************************************************************************************************/
void ARMInitTimers(void)
{
//dead zone=0, pre0= 150
rTCFG0= 0x00000095;
//all interrupt, mux0= 1/16
rTCFG1= 0x00000003;
//set T0 count
rTCNTB0= _CLOCK;
//update T0
rTCON= 0x00000002;
//add timer2 CFG
rTCFG0 |= 0xFF00; //pre1=255;
rTCFG1 |= 0x300; //mux2=1/16;
rTCNTB2 = 0x5000;
rTCON |= 0x2000; //update T2;
}
/********************************************************************************************************
* start system timer0 *
********************************************************************************************************/
void ARMStartTimer(void)
{
rTCON = 0x9; //autoreload and start
//add Timer2 start
rTCON |= 0x9000;//autoreload and start Timer2
}
/********************************************************************************************************
* enable the interrupt *
********************************************************************************************************/
void ARMInstallSystemTimer(void)
{
//Non-vectored,IRQ enable,FIQ disable
rINTCON=0x1;
//Non maksed TIMER0
//rINTMSK=~( BIT_TIMER0 | BIT_GLOBAL | BIT_EINT4567); //Default value=0x7ffffff
// rINTMSK=~( BIT_TIMER0 | BIT_GLOBAL ); //Default value=0x7ffffff
rINTMSK=~( BIT_TIMER0 | BIT_TIMER2 | BIT_GLOBAL ); //Default value=0x7ffffff
}
//*******************************************************************************************************
void BreakPoint(void)
{
Uart_Printf("Enter BreakPoint");
while(1)
{
Led_Set( 0xf ) ; Delay( 1000 ) ;
Led_Set( 0x0 ) ; Delay( 1000 ) ;
}
}
//*******************************************************************************************************
void DebugUNDEF(void)
{
Uart_Printf("Enter DebugUNDEF");
while(1)
{
Led_Set( 0xf ) ; Delay( 1000 ) ;
Led_Set( 0x0 ) ; Delay( 1000 ) ;
}
}
//*******************************************************************************************************
void DebugSWI(void)
{
Uart_Printf("Enter DebugSWI");
while(1)
{
Led_Set( 0xf ) ; Delay( 1000 ) ;
Led_Set( 0x0 ) ; Delay( 1000 ) ;
}
}
//*******************************************************************************************************
void DebugPABORT(void)
{
Uart_Printf("Enter DebugPABORT");
while(1)
{
Led_Set( 0xf ) ; Delay( 1000 ) ;
Led_Set( 0x0 ) ; Delay( 1000 ) ;
}
}
//*******************************************************************************************************
void DebugDABORT(void)
{
Uart_Printf("Enter DebugDABORT");
while(1)
{
Led_Set( 0xf ) ; Delay( 1000 ) ;
Led_Set( 0x0 ) ; Delay( 1000 ) ;
}
}
//*******************************************************************************************************
void DebugFIQ(void)
{
Uart_Printf("Enter DebugFIQ");
while(1)
{
Led_Set( 0xf ) ; Delay( 1000 ) ;
Led_Set( 0x0 ) ; Delay( 1000 ) ;
}
}
//*******************************************************************************************************
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -