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

📄 44blib.c

📁 一个ADS下的ucos-II的移植代码,大家
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "..\inc\register.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\option.h"

#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

//***************************************************************************
//以下是液晶模块控制器初始化和运行所用到的:
#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)

//***************************************************************************
//以下是实时时钟控制器初始化和运行所用到的:
#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;
    
	//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	= 0x357;
	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)
{
	if((LedStatus&0x01)==0x01)		//PE7状态设置
		rPDATE=rPDATE&0x17f;
	else
		rPDATE=rPDATE|0x80;
	
	if((LedStatus&0x02)==0x02)		//PE6状态设置
		rPDATE=rPDATE&0x1bf;
	else
		rPDATE=rPDATE|0x40;

	if((LedStatus&0x04)==0x04)		//PE5状态设置
		rPDATE=rPDATE&0x1df;
	else
		rPDATE=rPDATE|0x20;

	if((LedStatus&0x08)==0x08)		//PE4状态设置
		rPDATE=rPDATE&0x1ef;
	else
		rPDATE=rPDATE|0x10;
}
//***************************************************************************

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

/****************************************************************************
【功能说明】蜂鸣器鸣叫time个100us
****************************************************************************/
void Beep(unsigned int time)
{
	rPDATE = (rPDATE | 0x08);
	Delay(time);		//延时若干个100us
	rPDATE = (rPDATE & 0x1f7);
}
//***************************************************************************

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

/****************************************************************************
【功能说明】中断初始化
****************************************************************************/
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;    
    //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;
    //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(unsigned char ch)
{
    if(ch == 0)
    {	    
		while(!(rUTRSTAT0 & 0x1));		//等待直到接受到一个数据
		return rURXH0;
    }
    else
    {
		while(!(rUTRSTAT1 & 0x1));		//等待直到接受到一个数据
		return	rURXH1;

⌨️ 快捷键说明

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