⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp.c

📁 把uCOS移植到三星的44B0的CPU上面
💻 C
📖 第 1 页 / 共 2 页
字号:
* 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 + -