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

📄 model.c.bak

📁 arm s3c44b0x 的程序源码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
【文  件  名  称】model.c
【功  能  描  述】三星S3C44B0X板demo程序代码
【程  序  版  本】3.0
【创建人及创建日期】李希岗//2002年11月19日19:26
【修改人及修改日期】李希岗//2003年3月18日17:24
****************************************************************************/

//***************************************************************************
#include <stdio.h>
#include <stdarg.h>
#include "inc\44b.h"
#include "inc\option.h"
//***************************************************************************
#define U32 unsigned int
#define U16 unsigned short
#define S32 int
#define S16 short int
#define U8  unsigned char
#define S8  char
//***************************************************************************
//以下是液晶模块控制器初始化和运行所用到的:
#define MVAL_USED (0)   //VM信号触发率
#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];    //

#include "inc\bmp034.c"
//***************************************************************************
//以下是实时时钟控制器初始化和运行所用到的:
#define RTC_YEAR0   (0x03)    //年
#define RTC_MONTH0    (0x02)    //月
#define RTC_DAY0    (0x0e)    //日
#define RTC_DATE0   (0x06)    //星期SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
#define RTC_HOUR0   (0x08)    //小时
#define RTC_MIN0    (0x08)    //分
#define RTC_SEC0    (0x08)    //秒

#define RTC_YEAR1   (0x03)    //年
#define RTC_MONTH1    (0x03)    //月
#define RTC_DAY1    (0x0e)    //日
#define RTC_DATE1   (0x06)    //星期-SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
#define RTC_HOUR1   (0x08)    //小时
#define RTC_MIN1    (0x08)    //分
#define RTC_SEC1    (0x08)    //秒
//***************************************************************************

/****************************************************************************
【功能说明】锁相环设置,修改系统主频
Fout = (8 + M_DIV) * Fin / [ (2+P_DIV) * (2^S_DIV) ]
****************************************************************************/
void ChangePllValue(int mdiv,int pdiv,int sdiv)
{
    rPLLCON = (mdiv << 12) | (pdiv << 4) | sdiv;
}
//***************************************************************************

/****************************************************************************
【功能说明】通用延时函数,延时time个100us
****************************************************************************/
static int delayLoopCount = 400;
void Delay(int time)
{
  int i,adjust=0;
  if(time==0)
  {
    time=200;
    adjust=1;
    delayLoopCount=400;
    rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
    rWTDAT=0xffff;
    rWTCNT=0xffff;   
    rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5);
  }
  for(;time>0;time--)
    for(i=0;i<delayLoopCount;i++);
  if(adjust==1)
  {
    rWTCON=((MCLK/1000000-1)<<8)|(2<<3);
    i=0xffff-rWTCNT;
    delayLoopCount=8000000/(i*64);
  }
}
//***************************************************************************

/****************************************************************************
【功能说明】IO端口功能、方向设定
****************************************************************************/
void Port_Init(void)
{
  // PORT A GROUP
  /*  BIT 9 8 7 6 5 4 3 2 1 0 */
  /*  A24   A23 A22 A21 A20 A19 A18 A17 A16 A0  */        
  /*  0   1 1 1 1 1 1 1 1 1 */
  rPCONA = 0x1ff; 

  // PORT B GROUP
  /*  BIT 10  9   8   7   6   5   4   3   2   1   0   */
  /*  /CS5  /CS4  /CS3  /CS2  /CS1  nWBE3 nWBE2 /SRAS /SCAS SCLK  SCKE  */
  /*  EXT   NIC   USB   IDE   SMC   NC    NC    Sdram Sdram Sdram Sdram */
  /*      0,        0,   0,   0,    1,    0,       0,     1,    1,    1,   1          */
  rPDATB = 0x04f;
  rPCONB = 0x04f;
    
    //改动 by yang 2003.5
  //PORT C GROUP
  //BUSWIDTH=16                         */
  /*  PC15    14    13    12    11    10    9   8 */
  /*  o   o   RXD1  TXD1  o   o   o   o */
  /*  NC    NC    Uart1 Uart1 NC    NC    NC    NC  */
  /*   01   01    11    11    01    01    01    01  */

  /*  PC7   6   5   4   3   2   1   0 */
  /*   o    o   o   o   o   o   o   o */
  /*   NC   NC    NC    NC    SMCALE  SMCCLE  SMCCE SMCRB*/
  /*   01   01    01    01    01    01    01    01  */
  rPDATC = 0x0000;  //All IO is low
  rPCONC = 0x5f555555;  
  rPUPC  = 0x3000;  //PULL UP RESISTOR should be enabled to I/O

  //PORT D GROUP
  /*  PORT D GROUP(I/O OR LCD)                    */
  /*  BIT7    6   5   4   3   2   1   0 */
  /*      VF    VM    VLINE VCLK  VD3   VD2   VD1   VD0 */
  /*     01   01    01    01    01    01    01    01  */
  rPDATD= 0x55;
  rPCOND= 0xaaaa; 
  rPUPD = 0x00;
  //These pins must be set only after CPU's internal LCD controller is enable
///////////////////////////////////////////////////// 
  //PORT E GROUP 
  /*  Bit 8   7   6   5   4   3   2   1   0   */
  /*    ENDLAN  LED3  LED2  LED1  LED0  BEEP  RXD0  TXD0  CLKOUT  */ 
  /*      00    01    01    01    01    01    10    10    01    */
  rPDATE  = 0x157;
  rPCONE  = 0x556b; 
  rPUPE = 0xff;
  
  //PORT F GROUP
  /*  Bit8    7   6   5    4    3   2   1   0   */   
  /*  IISCLK  IISDI IISDO IISLRCK Input Input Input IICSDA  IICSCL  */
  /*  100   010   010   001   00    01    01    10    10    */
  rPDATF = 0x0;
  rPCONF = 0x22445a;
  rPUPF  = 0x1d3;

  //PORT G GROUP
  /*  BIT7    6   5   4   3   2   1   0  */
  /*  INT7    INT6    INT5    INT4    INT3    INT2    INT1    INT0  */
  /*    S3    S4    S5    S6    NIC   EXT   IDE   USB */
  /*      11      11      11      11      11      11      11      11       */
  rPDATG = 0xff;
  rPCONG = 0x0000;
  rPUPG  = 0x00;  //should be enabled  

  rSPUCR=0x7;  //D15-D0 pull-up disable

  /*定义非Cache区*/
  //rNCACHBE0 = 0x2c000; 
  /*所有的外部硬件中断为低电平触发*/
  rEXTINT=0x0;
}
//***************************************************************************

/****************************************************************************
【功能说明】四个LED 点亮/熄灭状态设置(LedStatus低四位电平高低对应着四个LED亮/熄)
****************************************************************************/
void Led_Display(int LedStatus)
{
  //改动 by yang 2003.5
  if((LedStatus&0x01)==0x01)    //PE7状态设置
    rPDATC=rPDATC&0x1f7;
  else
    rPDATC=rPDATC|0x8;
  
  if((LedStatus&0x02)==0x02)    //PE6状态设置
    rPDATC=rPDATC&0x1fb;
  else
    rPDATC=rPDATC|0x4;

  if((LedStatus&0x04)==0x04)    //PE5状态设置
    rPDATC=rPDATC&0x1fd;
  else
    rPDATC=rPDATC|0x2;

  if((LedStatus&0x08)==0x08)    //PE4状态设置
    rPDATC=rPDATC&0x1fe;
  else
    rPDATC=rPDATC|0x1;
}
//***************************************************************************

/****************************************************************************
【功能说明】LED来回闪烁显示 
****************************************************************************/
void Led_Disp(void)
{
  Led_Display(0x08);    //LED点亮/熄灭状态设置
  Delay(1000);    //延时若干个100us
  Led_Display(0x04);    //LED点亮/熄灭状态设置
  Delay(1000);    //延时若干个100us
  Led_Display(0x02);    //LED点亮/熄灭状态设置
  Delay(1000);    //延时若干个100us
  Led_Display(0x01);    //LED点亮/熄灭状态设置
  Delay(1000);    //延时若干个100us
  Led_Display(0x02);    //LED点亮/熄灭状态设置
  Delay(100);   //延时若干个100us
  Led_Display(0x04);    //LED点亮/熄灭状态设置
  Delay(1000);    //延时若干个100us
  Led_Display(0x08);    //LED点亮/熄灭状态设置
  Delay(1000);    //延时若干个100us
}
//***************************************************************************

/****************************************************************************
【功能说明】蜂鸣器鸣叫time个100us
****************************************************************************/
void Beep(unsigned int time)
{
  //改动 by yang  2003.5
  rPDATE = (rPDATE | 0x020);
  Delay(time);    //延时若干个100us
  rPDATE = (rPDATE & 0x1df);
}
//***************************************************************************

/****************************************************************************
【功能说明】检测四个按键,有任何一个按键按下就让蜂鸣器鸣叫,否则不鸣叫
****************************************************************************/
void Key_Speaker(void)
{
  //改动 by yang 2003.05
  unsigned int m ;
  m = rPDATG;
  if((m & 0xf0) < 0xf0) {rPDATE = (rPDATE | 0x020);}
  else  {rPDATE = (rPDATE & 0x1df);}
}
//***************************************************************************

/****************************************************************************
【功能说明】中断初始化
****************************************************************************/
void Isr_Init(void)
{
  rINTCON=0x5;        //Non-vectored,IRQ enable,FIQ disable //
  rINTMOD=0x0;        //All=IRQ mode//
  rINTMSK=~(BIT_EINT0 | BIT_GLOBAL);  //Default value=0x7ffffff//
}
//***************************************************************************

/****************************************************************************
【功能说明】异步串行口0初始化
****************************************************************************/
void Uart0_Init(int mclk,int baud)
{
    if(mclk == 0)
  mclk = MCLK;

    rUFCON0 = 0x0;     //禁止使用FIFO
    rUMCON0 = 0x0;     //禁止使用FIFO
    rULCON0 = 0x3;     //正常无奇偶校验,一个停止位,8个数据位
    rUCON0 = 0x245;    
   
   //改动 by yang 2003.5
    //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
}
//***************************************************************************

/****************************************************************************
【功能说明】异步串行口1初始化
****************************************************************************/
void Uart1_Init(int mclk,int baud)
{
    if(mclk == 0)
  mclk = MCLK;

    rUFCON1 = 0x0;     //禁止使用FIFO
    rUMCON1 = 0x0;     //禁止使用FIFO
    rULCON1 = 0x3;     //正常无奇偶校验,一个停止位,8个数据位
    rUCON1 = 0x245;
   
   //38400,
   //改动 by yang 2003.5
    //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
}
//***************************************************************************

/****************************************************************************
【功能说明】从串行口收取一个字符,ch为0从UART0收取,ch为1从UART1收取
****************************************************************************/
char Uart_Getch(U8 ch)
{
    if(ch == 0)
    {     
    while(!(rUTRSTAT0 & 0x1));    //等待直到接受到一个数据
    return rURXH0;
    }
    else
    {
    while(!(rUTRSTAT1 & 0x1));    //等待直到接受到一个数据
    return  rURXH1;
    }
}
//***************************************************************************

/****************************************************************************
【功能说明】检查串行口是否收到字符并返回,ch为0从UART0收取,ch为1从UART1收取
****************************************************************************/
char Uart_GetKey(U8 ch)
{
    if(ch == 0)
    {     
    if(rUTRSTAT0 & 0x1)   //如果收到字符就返回该字符
          return rURXH0;
    else  return 0;   //如果没有收到字符就返回0
    }
    else
    {
    if(rUTRSTAT1 & 0x1)   //如果收到字符就返回该字符
        return rURXH1;
    else  return 0;   //如果没有收到字符就返回0
    }
}
//***************************************************************************

/****************************************************************************
【功能说明】向串行口发送一个数据,ch为0向UART0发送,ch为1向UART1发送
****************************************************************************/
void Uart_SendByte(U8 ch,int 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')
    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -