📄 initsystem.c
字号:
//=============================================================
// 文件名称: InitSystem.c
// 实现功能: 对系统的初始化
// 完成日期: 2004,7,14
//==============================================================
#include <SPCE061A.h>
#define M_TIMERA_EN 0x0001//0x0031 //使能TimerA的配置,计数频率为96KHz
#define M_TIMERA_STOP 0x0006//0x0036 //停止TimerA的配置,计数器停止工作
#define Data_Addr0 (struct Robot_xx *)0xf600 //
#define Data_Addr1 (struct Robot_xx *)0xf700 //
extern unsigned int uiIOB_20Hz_flag;
extern unsigned int uiEXT_EN_flag; //外部中断使能标识位
extern unsigned int uiRS_ReciveFlag;
extern unsigned int uiMeasure_Index; //当前测量的次数
extern unsigned int uiError_Counter; //出错累加器
unsigned int uiMeasure_Num; //况的测量次数
unsigned int uiMeasure_Data[50]; //测量的数据个数
unsigned int uiMeasure_Read_Index; //测量结果查询索引号
//=============================================================
// 函数名称: InitSystem()
// 功能描述: 系统IO口、中断等进行初始化
// 语法格式: void InitSystem(void)
// 入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=============================================================
extern unsigned int Flash_read(unsigned int adr);
void InitSystem(void)
{
unsigned int iTest; //设置的中间量
//设置IOB口 IOB01口为20Hz(也许用16Hz)的输出
//IOB2 口为外部中断的输入,设置为带上拉的输入口。
//在IOB口中IOB7为RX IOB10为TX
*P_IOB_Dir = 0x0401;
*P_IOB_Attrib = 0x0481;
iTest = 0x0005;
*P_IOB_Data = iTest;
// *P_SystemClock=0x0088; //系统时钟设置为49.152MHz,并使晶振处于强振状态之下
//设置串行口 9600 SystemClock:24.576MHz
*P_UART_BaudScalarLow = 0x00;
*P_UART_BaudScalarHigh = 0x05;
*P_UART_Command1 = 0x80; //使能接收中断
*P_UART_Command2 = 0xc0; //使能接收发送管脚
//开时间基准中断,TMB1 16Hz
iTest=0x0001;
*P_TimeBase_Setup=iTest;
//设置TimerB 选使其处于停止工作状态
*P_TimerB_Data = 0x0000;
*P_TimerB_Ctrl = M_TIMERA_STOP;
iTest = 0x0008; //先还使能所有的中断(除串行口中断外)0x2002
*P_INT_Ctrl = iTest; //开IRQ5的2Hz中断,用来清狗
__asm("FIQ OFF");
__asm("IRQ ON");
}
//=============================================================
// 函数名称: InitData()
// 功能描述: 部分全局数据的初始化
// 语法格式: void InitData(void)
// 入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=============================================================
void InitData(void)
{
unsigned int uiData_Pointer;
unsigned int i;
uiIOB_20Hz_flag = 0; //初始化为零
uiEXT_EN_flag = 0;
uiRS_ReciveFlag = 0;
uiError_Counter = 0;
uiMeasure_Index = 0;
//以下是系统数据的初始化,即存在Flash中的数据。
uiData_Pointer = (unsigned int)Data_Addr1;
if((Flash_read(uiData_Pointer)==0xaaaa)&&(Flash_read(uiData_Pointer+1)==0xbbbb))
{//flash 中已存有数据 读取
uiMeasure_Num = Flash_read(uiData_Pointer+2); //读取以前存储的数据
uiMeasure_Read_Index = uiMeasure_Num;
uiData_Pointer = (unsigned int)Data_Addr0; //指到数据存储区
for(i=0;i<uiMeasure_Num;i++)
{
uiMeasure_Data[i] = Flash_read(uiData_Pointer+i);
}
}
else
{//若以前没有存有数据,则初始化为0
uiMeasure_Num = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -