📄 bsp.c
字号:
* Arguments : none
*********************************************************************************************************
*/
void OS_CPU_FIQ_ISR_Handler (void)
{
unsigned int i,temp,temp1;
temp1=~rINTMSK;
temp=rF_ISPR&temp1;
for(i=0;i<26;i++)
{
if((temp>>i)&0x00000001)
{
if(ISR_Handler[i]!=(BSP_PFNCT)0)
{
(*ISR_Handler[i])();
}
rF_ISPC=0x01<<i;
break;
}
}
}
/*
*********************************************************************************************************
* TICKER INITIALIZATION
*
* Description : This function is called to initialize uC/OS-II's tick source which uses the PIT
* (typically a timer generating interrupts every 1 to 100 mS).
*
* Arguments : none
*
* Note(s) : 1) PIT Interrupt frequency:
*
* MCLK 1
* Freq = ---- * -----------
* 16 (PIV + 1)
*
*
* MCLK 1
* PIV = ( ---- * ------ ) - 1
* 16 Freq
*
* Where:
* MCLK = 48 MHz (i.e 48,000,000)
* Freq = Desired frequency (i.e. OS_TICKS_PER_SEC)
*********************************************************************************************************
*/
/*
static void Tmr_TickInit (void)
{
//INT32U counts;
ISR_Handler[13]=Tmr_TickISR_Handler;
rTCFG0=0x00000004;
rTCFG1=0x00000003;
rTCNTB0=7500;
rTCMPB0=0x0;
rTCON=0x2;
rTCON=0x9;
rINTCON=0x5;
rINTMSK = ~(BIT_TIMER0|BIT_GLOBAL);
}
*/
/*
*********************************************************************************************************
* PIT IRQ HANDLER
*
* Description : This function handles the PIT interrupt that is used to generate TICKs for uC/OS-II.
*
* Arguments : none
*********************************************************************************************************
*/
/*
static void Tmr_TickISR_Handler (void)
{
volatile INT32U status;
OSTimeTick();
//rI_ISPC = BIT_TIMER0;
}
*/
/*
static void EXT_Int3Init (void)
{
ISR_Handler[22]=EXT_INT3_ISR_Handler;
rINTMSK &= ~BIT_EINT3;
}
*/
/*
static void EXT_INT3_ISR_Handler (void)
{
//rI_ISPC = BIT_EINT3;
}
*/
#define NETBASE ((volatile unsigned char *)(0x60a0000))
void LedOut(unsigned char ch, unsigned char flag)
{
unsigned char chmod1[]={0x48,0xeb,0x52, 0x62,0xe1,0x64,0x44,0xea,0x40,0x60,0xC0,
0x45,0x5c,0x43,0x54,0xd4};
unsigned short value;
volatile short *p = (volatile short *)0x6080000;
if (flag) {
value = chmod1[ch/16];
value <<= 8;
value |= chmod1[ch%16];
} else {
if (ch>99) ch = ch % 100;
value = chmod1[ch/10];
value <<= 8;
value |= chmod1[ch%10];
}
*p = value;
}
/*
void Delay(int time)
{
int i=0;
for(;time>0;time--)
for(i=0;i<400;i++);
}
*/
/*
int NetInit()
{
//
// Reset MAC
//
*(volatile unsigned char *)0x60E0000 |= 0x03;
Delay(500);
*(volatile unsigned char *)0x60E0000 &= 0xFC;
Delay(100);
*(NETBASE+0x1e) = *(NETBASE+0x1e + 0x20);
Delay(100);
//
// Set power status & msic
//
*(NETBASE+0x00) = 0xc1;
*(NETBASE+0x20) = 0xc0;
*(NETBASE+0x04) = 0x80;
*(NETBASE+0x24) = 0x00;
*(NETBASE+0x06) = 0x70;
*(NETBASE+0x26) = 0xFF;
//
// Write MAC
//
*(NETBASE+0x00) = 0x41;
*(NETBASE+0x20) = 'S';
*(NETBASE+0x02) = 'T';
*(NETBASE+0x22) = 'R';
*(NETBASE+0x04) = 'O';
*(NETBASE+0x24) = 'N';
*(NETBASE+0x06) = 'G';
*(NETBASE+0x00) = 0x22;
return 1;
}
*/
void Uart0Init(int mclk,int baud)
{
if(mclk == 0) mclk = MCLK;
rUFCON0 = 0x00; //禁止使用FIFO
rUMCON0 = 0x0; //禁止使用FIFO
rULCON0 = 0x3; //正常无奇偶校验,一个停止位,8个数据位
rUCON0 = 0x245;
//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
rUBRDIV0 = ( (int)(mclk/16./baud + 0.5) -1 );
//UBRDIVn = ((int)(MCLK/16/baud + 0.5) -1) 波特率与系统主时钟计算公式
//Delay(1); //延时若干个100us
}
void Uart1Init(int mclk,int baud)
{
if(mclk == 0) mclk = MCLK;
rUFCON1 = 0x0; //禁止使用FIFO
rUMCON1 = 0x0; //禁止使用FIFO
rULCON1 = 0x3; //正常无奇偶校验,一个停止位,8个数据位
rUCON1 = 0x245;
//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
rUBRDIV1 = ( (int)(mclk/16./baud + 0.5) -1 );
//UBRDIVn = ((int)(MCLK/16/baud + 0.5) -1) 波特率与系统主时钟计算公式
//Delay(1); //延时若干个100us
}
#define MVAL_USED (0)
#define MVAL (13)
#define INVCLK (0)
#define INVFRAME (0)
#define INVLINE (0)
#define CLKVAL_SL (8) //VCLK=MCLK/(CLKVAL*2) (CLKVAL >= 2)
#define M5D(n) ((n) & 0x1fffff)
unsigned char Bmp[9600];
/*
void LcdInit(void)
{
int i;
for (i=0;i<sizeof(Bmp);i++) Bmp[i]=0xF0;
rPCOND=0xaaaa;
rLCDCON1=(2)|(INVFRAME<<2)|(INVLINE<<3)|(INVCLK<<4)|(1<<5)|(MVAL_USED<<7)|(1<<8)|(1<<10)|(CLKVAL_SL<<12);
//下降沿装载视频数据,禁止视频输出,LCD FIFO清空;行、帧信号取反;
//4位单扫描模式;WDLY=8clk,WLH=8clk,CLKVAL_SL=38
rLCDCON2=(239)|(79<<10)|(10<<21);
//垂直点数为240,水平点数320=(80字),LINEBLANK=10
rLCDSADDR1= (0x0<<27) | ( ((unsigned int)Bmp>>22)<<21 ) | M5D((unsigned int)Bmp>>1);
// 黑白模式, LCDBANK, LCDBASEU
rLCDSADDR2= (1<<29) | (M5D((unsigned int)Bmp + ((320/8)*(240)))>>1) | (MVAL<<21);
rLCDSADDR3= (320/16) | ( 0<<9 );
rLCDCON1=(1)|(INVFRAME<<2)|(INVLINE<<3)|(INVCLK<<4)|(1<<5)|(MVAL_USED<<7)|(1<<8)|(1<<10)|(CLKVAL_SL<<12);
}
*/
/*
void PutChar (unsigned char ch,unsigned char data)
{
if(ch == 0)
{
if(data == '\n')
{
while(!(rUTRSTAT0 & 0x2));
//改动延时时间1--10
Delay(10); //由于超级终端反应较慢,有一个微小延迟
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x2)); //等待知道THR变空
//改动延时时间1--10
Delay(10);
rUTXH0 = data;
} else {
if(data == '\n')
{
while(!(rUTRSTAT1 & 0x2));
//改动延时时间1--10
Delay(10); //由于超级终端反应较慢,有一个微小延迟
rUTXH1 = '\r';
}
while(!(rUTRSTAT1 & 0x2)); //等待知道THR变空
//改动延时时间1--10
Delay(10);
rUTXH1 = data;
}
}
*/
/*
void PutStr(unsigned char ch,char *pt)
{
while(*pt) PutChar(ch,*pt++);
}
*/
/*
void OutPut(unsigned char ch,char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
PutStr(ch,string);
va_end(ap);
}
*/
/*
char GetChar(unsigned char ch)
{
if(ch == 0)
{
while(!(rUTRSTAT0 & 0x1)); //等待直到接受到一个数据
return rURXH0;
}
else
{
while(!(rUTRSTAT1 & 0x1)); //等待直到接受到一个数据
return rURXH1;
}
}
*/
//***************************************************************************
/****************************************************************************
【功能说明】检查串行口是否收到字符并返回,ch为0从UART0收取,ch为1从UART1收取
****************************************************************************/
/*
char GetKey(unsigned char ch)
{
if(ch == 0)
{
if(rUTRSTAT0 & 0x1) //如果收到字符就返回该字符
return rURXH0;
else return 0; //如果没有收到字符就返回0
}
else
{
if(rUTRSTAT1 & 0x1) //如果收到字符就返回该字符
return rURXH1;
else return 0; //如果没有收到字符就返回0
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -