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

📄 utils.c

📁 pxa27x下rtc程序
💻 C
字号:
/***************************************优龙科技责任有限公司*********************************************
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: utils.c
**创   建   人: hzh
**最后修改日期: 2005-11-28
**描        述: PXA270的主程序
**                
********************************************************************************************************/
#include <stdio.h>
#include <stdarg.h>
#include "systypes.h"
#include "xsuart.h"
#include "xsffuart.h"
#include "xsbtuart.h"
#include "utils.h"

static UartContextT * pSerialConsole;

/*****************************************************************************
** 函数名称: SerialConsoleInit
** 功能描述: 串口初始化程序,这里采用的是全功能串口FFUART
** 输 入:   rate:波特率
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
void SerialConsoleInit(UINT rate)
{
	UartContextT * ctxP;
	
	XsFFUartSWInit();		//FFUART串口初始化
	//XsBTUartSWInit();
	ctxP = &FFUart;
	ctxP->uartCfgP->rate = rate;
	ctxP->setupUartFnP(ctxP);

}


/*****************************************************************************
** 函数名称: SerialConsleSel
** 功能描述: 串口选择函数,FFUART,BTUART,SSUART
** 输 入:   ch:串口通道,选择是FFUART,BTUART
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
int SerialConsleSel(int ch)
{
	if(ch==0||ch==1) {
		int old;
		
		//old = (pSerialConsole==&BTUart)?1:0;
		//pSerialConsole = ch?&BTUart:&FFUart;
		pSerialConsole=&FFUart;					//选择FFUART

		return old;
	}
	return -1;
}

/*****************************************************************************
** 函数名称: fputc
** 功能描述: 串口输出函数,向串口输出字符,由库函数的printf来调用
***extract from stdinout.c
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
extern int lcd_text_en;
int fputc(int ch, FILE *f)
{
	char chs[2];	//use dynamic variable not static, hzh
	UartContextT * ctxP;
	int i = 1;

	ctxP = pSerialConsole;
    chs[0] = ch;
    if(ch=='\n') {	//'\n','\r', hzh
    	chs[1] = '\r';
    	i++;
    }
    ctxP->writeUartFnP(ctxP, chs, i);
    
    // A virtual switch can set this. No physical switch available
    //if ((POSTRunState() & VS_LCD_TEXT_ON) == VS_LCD_TEXT_ON)
   if(lcd_text_en==0)
   {
    	//XsLcdChar(chs[0]);
    }
    return ch;
}

/*****************************************************************************
** 函数名称: ferror
** 功能描述: 
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
int ferror(FILE *f)
{
    return 0;
}

/*****************************************************************************
** 函数名称: getc
** 功能描述: 从串口获得一个字符
** 输 入  :   
** 输 出  :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
//add by hzh
int getc(FILE * f)
{
	char chs;
	UartContextT * ctxP;

	ctxP = pSerialConsole;
    while(!ctxP->readUartFnP(ctxP, &chs, 1));
    
    return chs;
}

/*****************************************************************************
** 函数名称: kbhit
** 功能描述: 判断是否由字符输入
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
int kbhit(void)
{
	UartContextT * ctxP;

	ctxP = pSerialConsole;
    return ctxP->RxRdyUartFnP(ctxP);
}

/*****************************************************************************
** 函数名称: waitkey
** 功能描述: 等待一个字符输入
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
void waitkey(void)
{
	while(!kbhit());	
}

/*****************************************************************************
** 函数名称: getkey
** 功能描述: 获得一个字符输入
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
int getkey(void)
{
	if(kbhit())
		return getc(stdin);
	else
		return 0; 
	//return PostGetKeypad();
}
/*
int getyorn(void)
{
	char c;
	
	puts(" [y/n] ");
	while(1) {		
		c = getchar();
		if((c=='y')||(c=='Y')||(c=='n')||(c=='N'))
			break;
	}
	putchar(c);
	putchar('\n');
	return c&1;	//y&Y are odd, n&N are even
}
*/
/**************************延迟函数************/


#define	OSCR0	*(volatile UINT *)0x40A00010
#define	OSSR	*(volatile UINT *)0x40A00014
#define	OWER	*(volatile UINT *)0x40A00018
#define	OIER	*(volatile UINT *)0x40A0001C
#define	OSCR4	*(volatile UINT *)0x40A00040
#define	OSMR4	*(volatile UINT *)0x40A00080
#define	OMCR4	*(volatile UINT *)0x40A000C0

void DM_WaitUs(int usVal)
{
	OMCR4  = (1<<7)|0;		//stop but don't reset counter after match
	OSMR4  = usVal;			//set match value
	OSCR4  = 0;				//reset counter
	OIER   = 1<<4;			//enable channel 4 int only
	OSSR   = 1<<4;			//clear status
	OMCR4 |= 4;				//start
	
	while(!(OSSR&(1<<4)));	//wait...
}

void DM_WaitMs(int msVal)
{
	OMCR4  = (1<<7)|0;		//stop but don't reset counter after match
	OSMR4  = msVal;			//set match value
	OSCR4  = 0;				//reset counter
	OIER   = 1<<4;			//enable channel 4 int only
	OSSR   = 1<<4;			//clear status
	OMCR4 |= 2;				//start
	
	while(!(OSSR&(1<<4)));	//wait...
}

void DM_WaitS(int sVal)
{
	OMCR4  = (1<<7)|0;		//stop but don't reset counter after match
	OSMR4  = sVal;			//set match value
	OSCR4  = 0;				//reset counter
	OIER   = 1<<4;			//enable channel 4 int only
	OSSR   = 1<<4;			//clear status
	OMCR4 |= 3;				//start
	
	while(!(OSSR&(1<<4)));	//wait...
}

int WaitKeyTimeoutS(int sec, int *ch)
{
	OMCR4  = (1<<7)|0;		//stop but don't reset counter after match
	OSMR4  = sec;			//set match value
	OSCR4  = 0;				//reset counter
	OIER   = 1<<4;			//enable channel 4 int only
	OSSR   = 1<<4;			//clear status
	OMCR4 |= 3;				//start
	
	while(!(OSSR&(1<<4))&&!kbhit());	//wait...
	
	if(kbhit()) {
		*ch = getc(stdin);
			return 1;
	}
	return -1;
}

/*************************************************************/
/*#include "DM_Debug.h"

void DM_CwDbgPrintf (DM_ControlWordsBitsT bitId, char * fmt, ...)
{
}

INT DM_ControlWordsDebugPrintGetBit (DM_ControlWordsBitsT bitId)
{
	return 0;
}

#include "dm_errors.h"

void XllpUtilityErrorRecord (XLLP_UINT32_T code, XLLP_UINT32_T param1, 
                            XLLP_UINT32_T param2, XLLP_UINT32_T param3)
{
}
*/
/*************************************************************/
/*
#include "boardControl.h"

UINT SelectIrOperationMode (IrOperationT operation, IrPowerT param)
{
	return 1;
}
*/
void udelay(UINT us)
{
	DM_WaitUs(us);
}

void mdelay(UINT ms)
{
	DM_WaitMs(ms);
}
/*****************************************************************************
** 函数名称: show_led
** 功能描述: 点灯函数
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
#define	GPSR0	*(volatile UINT *)0x40E00018
#define	GPCR0	*(volatile UINT *)0x40E00024

void show_led(UINT msk, UINT lt)
{
	lt  = lt?(3<<3):~(3<<3);
	msk = msk<<3;
	
	GPSR0 = (msk&(3<<3))&~lt;
	GPCR0 = (msk&(3<<3))&lt;
}

/*************************************************************/
/*****************************************************************************
** 函数名称: arch_reset
** 功能描述: Watchdog复位
** 输 入:   
** 输 出 :  无
** 全局变量: 无
** 调用模块: 无
*****************************************************************************/
#define	OSMR0	*(volatile UINT *)0x40A00000
#define	OSMR1	*(volatile UINT *)0x40A00004
#define	OSMR2	*(volatile UINT *)0x40A00008
#define	OSMR3	*(volatile UINT *)0x40A0000C
#define	OSCR0	*(volatile UINT *)0x40A00010
#define	OSSR	*(volatile UINT *)0x40A00014
#define	OWER	*(volatile UINT *)0x40A00018

void arch_reset(char mode)
{
	OSCR0 = 0;
	OSMR3 = OSCR0 + 325000;	//100ms
	OSSR |=	1<<3;
	OWER  = 1;				//enable watchdog

	puts("reboot...\n");
	while(1);
		//printf("%d\n", OSCR0);
}

/******************字节顺序处理函数**************************/
unsigned short ntohs(unsigned short s)
{
	return (s >> 8) | (s << 8);
}

unsigned short htons(unsigned short s)
{
	return (s >> 8) | (s << 8);
}

unsigned long ntohl(unsigned long l)
{
	return  ((l >> 24) & 0x000000ff) |
		((l >>  8) & 0x0000ff00) |
		((l <<  8) & 0x00ff0000) |
		((l << 24) & 0xff000000);
}

unsigned long htonl(unsigned long l)
{
	return ntohl(l);
/*	return  ((l >> 24) & 0x000000ff) |
		((l >>  8) & 0x0000ff00) |
		((l <<  8) & 0x00ff0000) |
		((l << 24) & 0xff000000);*/
}

char WaitUserKey(void)
{
	char c;
	
	do {
		c = getkey();
	} while(c==0);
	
	return c;
}

/************************End of File*********************************/

⌨️ 快捷键说明

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