📄 target.c
字号:
*******************************************************************************************************
*/
void PC_Disp(uint8 x, uint8 da)
{
UART0_SendByte(0xff);
UART0_SendByte(0x81);
UART0_SendByte(x);
UART0_SendByte(da);
UART0_SendByte(0x00);
}
/*
*******************************************************************************************************
** 函数名称 :PC_DispChar()
** 函数功能 :向PC机发送显示字符。
** 入口参数 :no 显示位置
** char 显示的字符,不能为ff
** 出口参数 :无
*******************************************************************************************************
*/
void PC_DispChar (uint8 no, uint8 chr)
{
UART0_SendByte (0xff);
UART0_SendByte (0x80);
UART0_SendByte (no);
UART0_SendByte (chr);
UART0_SendByte (0x00);
}
/*
*******************************************************************************************************
** 函数名称 :SendTimeRtc()
** 函数功能 :读取RTC的时间值,并将读出的时分秒值通过串口送到上位机显示。
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************
*/
void SendTimeRtc (void)
{
uint8 const SHOWTABLE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint32 datas;
uint32 times;
uint32 bak;
times = CTIME0; // 读取完整的时钟寄存器
datas = CTIME1;
bak = (datas >> 16) & 0xfff; // 获取 年
PC_Disp(0, SHOWTABLE[bak / 1000]);
bak = bak % 1000;
PC_Disp(1, SHOWTABLE[bak / 100]);
bak = bak % 100;
PC_Disp(2, SHOWTABLE[bak / 10]);
PC_Disp(3, SHOWTABLE[bak % 10]);
bak = (datas >> 8) & 0x0f; // 获取 月
PC_Disp(4, SHOWTABLE[bak / 10]);
PC_Disp(5, SHOWTABLE[bak % 10]);
bak = datas & 0x1f; // 获取 日
PC_Disp(6, SHOWTABLE[bak / 10]);
PC_Disp(7, SHOWTABLE[bak % 10]);
bak = (times >> 24) & 0x07; // 获取 星期
PC_Disp(8, SHOWTABLE[bak]);
bak = (times >> 16) & 0x1f; // 获取 小时
PC_Disp(9, SHOWTABLE[bak / 10]);
PC_Disp(10, SHOWTABLE[bak % 10]);
bak = (times >> 8) & 0x3f; // 获取 分钟
PC_Disp(11, SHOWTABLE[bak / 10]);
PC_Disp(12, SHOWTABLE[bak % 10]);
bak = times & 0x3f; // 获取 秒钟
PC_Disp(13, SHOWTABLE[bak / 10]);
PC_Disp(14, SHOWTABLE[bak % 10]);
}
/*
*******************************************************************************************************
** 函数名称 :RTCInit()
** 函数功能 :初始化实时时钟
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************
*/
void RTCInit (void)
{
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
CCR = 0x00; // 禁止时间计数器
YEAR = 2008;
MONTH = 02;
DOM = 20;
DOW = 3;
HOUR = 15;
MIN = 07;
SEC = 30;
CIIR = 0x01; // 设置秒值的增量产生1次中断
CCR = 0x01; // 启动RTC
}
void SEND_DATA(uint8 dat)
{
uint8 i;
for(i=0;i<8;i++)
{
if(dat&0x01)
{
IO0SET=DAT;
}
else
{
IO0CLR=DAT;
}
IO0CLR=SRCLK;
IO0SET=SRCLK;
dat=dat>>1;
}
}
void SEND_NUM(uint8 SHU)
{
uint8 shuju[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
i=SHU/10;
j=SHU%10;
SEND_DATA(shuju[i]);
SEND_DATA(shuju[j]);
IO0CLR=RCLK;
IO0SET=RCLK;
IO0CLR=OE;
}
void SEND_TIME(void)
{
uint8 const SHOWTABLE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
PC_DispChar (0,SHOWTABLE[j]);
PC_DispChar (1,SHOWTABLE[i]);
}
void ADCInit(void)
{
/* 进行ADC模块设置 */
AD0CR = (1 << 3) | // SEL=8,选择通道3
((Fpclk / 1000000 - 1) << 8) | // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
(0 << 16) | // BURST=0,软件控制转换操作
(0 << 17) | // CLKS=0, 使用11clock转换
(1 << 21) | // PDN=1,正常工作模式
(0 << 22) | // TEST1:0=00,正常工作模式
(1 << 24) | // START=1,直接启动ADC转换
(0 << 27); // 直接启动ADC转换时,此位无效
}
/*
*******************************************************************************************************
** 函数名称 :PC_DispChar()
** 函数功能 :向PC机发送显示字符。
** 入口参数 :x 显示字符的横坐标
** y 显示字符的纵坐标
** chr 显示的字符,不能为ff
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位。
** 出口参数 :无
*******************************************************************************************************
*/
void PC_Dis(uint8 x, uint8 y, uint8 chr, uint8 color)
{
UART0_SendByte(0xff); // 起始字符
UART0_SendByte(x);
UART0_SendByte(y);
UART0_SendByte(chr);
UART0_SendByte(color);
}
/*
*******************************************************************************************************
** 函数名称 :ISendStr()
** 函数功能 :向上位机发送字符串。
** 入口参数 :x 显示字符的横坐标
** y 显示字符的纵坐标
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位。
** str 要发送的字符串,以'\0'结束
** 出口参数 :无
*******************************************************************************************************
*/
void ISendStr (uint8 x, uint8 y, uint8 color, char *str)
{
while (1)
{
if (*str == '\0') break; // 结束字符
PC_Dis(x++, y, *str++, color);
if (x >= 80)
{
x = 0;
y++;
}
}
}
/*********************************************************************************************************
** Function name: TargetInit
**
** Descriptions: Initialize the target board; it is called in a necessary place, change it as
** needed
**
** input parameters: None
** Returned value: None
**
** Used global variables: None
** Calling modules: None
**
** Created by: Chenmingji
** Created Date: 2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TargetInit(void)
{
OS_ENTER_CRITICAL();
srand((uint32) TargetInit);
VICInit();
Timer0Init();
init_port();
InitialiseUART0(115200);
RTCInit ();
ADCInit();
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** 以下为一些与系统相关的库函数的实现
** 具体作用请ads的参考编译器与库函数手册
** 用户可以根据自己的要求修改
********************************************************************************************************/
/*********************************************************************************************************
** The implementations for some library functions
** For more details, please refer to the ADS compiler handbook and The library
** function manual
** User could change it as needed
********************************************************************************************************/
/*
这段程序,,去除掉。。。
by mcu123
在startup.s 中添加了
*/
/*
#include "rt_sys.h"
#include "stdio.h"
#pragma import(__use_no_semihosting_swi)
int __rt_div0(int a)
{
a = a;
return 0;
}
int fputc(int ch,FILE *f)
{
ch = ch;
f = f;
return 0;
}
int fgetc(FILE *f)
{
f = f;
return 0;
}
int _sys_close(FILEHANDLE fh)
{
fh = fh;
return 0;
}
int _sys_write(FILEHANDLE fh, const unsigned char * buf,
unsigned len, int mode)
{
fh = fh;
buf = buf;
len =len;
mode = mode;
return 0;
}
int _sys_read(FILEHANDLE fh, unsigned char * buf,
unsigned len, int mode)
{
fh = fh;
buf = buf;
len =len;
mode = mode;
return 0;
}
void _ttywrch(int ch)
{
ch = ch;
}
int _sys_istty(FILEHANDLE fh)
{
fh = fh;
return 0;
}
int _sys_seek(FILEHANDLE fh, long pos)
{
fh = fh;
return 0;
}
int _sys_ensure(FILEHANDLE fh)
{
fh = fh;
return 0;
}
long _sys_flen(FILEHANDLE fh)
{
fh = fh;
return 0;
}
int _sys_tmpnam(char * name, int sig, unsigned maxlen)
{
name = name;
sig = sig;
maxlen = maxlen;
return 0;
}
void _sys_exit(int returncode)
{
returncode = returncode;
}
char *_sys_command_string(char * cmd, int len)
{
cmd = cmd;
len = len;
return 0;
}
*/
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -