📄 复件 main.c
字号:
** 函数名称: Uart1Send
** 功能描述: Uart1发送程序
** 输 入: 无
** 输 出: 0:send fail ; 1:send ok
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
***********************************************************************************************/
INT8U Uart1Send(void)
{
INT8U err;
err = flgs.warn ? 0x80 : 0x00;
err = flgs.freconvswitch ? (err | fre_group) : err;
return(UART_write(1, &err, 1, 4));
}
/*********************************************************************************************************
** 函数名称: I2cE2rom
** 功能描述: E2rom烧写
** 输 入: SaveAddr:数据保存地址;
** SaveData:指向被保存数据的指针;
** SaveNo :需保存数据的个数
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年11月16日
** 备 注:改正CAT1025烧写时地址错误
**-------------------------------------------------------------------------------------------------------
**
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void I2cE2rom(INT8U SaveAddr, INT8U const *SaveData, INT8U SaveNo){
INT8U i;
INT8U x;
INT8U y;
INT8U *ptr;
INT8U I2ctemp[17];
x = SaveNo / 16;
y = SaveNo % 16;
ptr = I2ctemp;
for (i=0; i<x; i++)
{
*ptr = SaveAddr + 16*i;
memcpy((ptr + 1), (SaveData + 16*i + 1), 17);
I2cWrite(CAT1025, I2ctemp, 17);
OSTimeDly(OS_TICKS_PER_SEC / 100 + 1);
}
if (y != 0)
{
*ptr = SaveAddr + 16*x;
memcpy((ptr + 1), (SaveData + 16*x +1), y);
I2cWrite(CAT1025, I2ctemp, (y + 1));
OSTimeDly(OS_TICKS_PER_SEC / 100 + 1);
}
}
/*********************************************************************************************************
** 函数名称: LpcInitialize
** 功能描述: 芯片初始化
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LpcInitialize(void){
ReceMbox = OSMboxCreate(NULL);
if (ReceMbox == NULL) {
while (1);
}
TargetInit();
UART_Init(1);
UART_open(1, 19200, 8, 'n', 0);
UART_Init(0);
UART_open(0, 19200, 8, 'n', 0);
PINSEL1 = (PINSEL1 & 0xcfffffff) | (1<<29);//P0.30 is used as EINT3
PINSEL0 = (PINSEL0 & 0xffff3fff) | (3<<14);//P0.07 is used as EINT2
EXTMODE = 0X0c;
EXTPOLAR = 0X0c;
//IO0DIR = 0X3d23 3F00;
IO0DIR = 0X3d27fc00;
IO1DIR = 0X0F << 16;
IO1DIR |= 0X03 << 24;//p1.16:19,P1.24:25 output
sn74_oe_on();
sel_led_off();
test_off();
fre_cnt = 0x00000002;
fre_group = 0;
}
/*********************************************************************************************************
** 函数名称: GetE2RomData
** 功能描述: 读取E2Rom数据
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void GetE2RomData(void){
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U cp;
INT8U E2data[3];
cp = FreSaveAddr;
I2cRead(CAT1025, E2data, &cp, 1, 3);
fre_value = E2data[0];
pow_value = E2data[1];
fre_group = E2data[2];
if ((fre_value > 0x29) || (fre_value == 0x00))
{
fre_value = 0x01;
}
if (pow_value > 0x04)
{
pow_value = 0x01;
}
if (fre_group > MaxGroupNo)
{
fre_group = MaxGroupNo;
}
back.ffre = fre_value;
back.ppow = pow_value;
CtrlOut(fre_value-1,0x03);
LedRefresh(fre_value,0x03);
CtrlOut(pow_value,0x0f);
LedRefresh(pow_value,0x0f);
OS_ENTER_CRITICAL();
memcpy(fre_char2, fre_char3[fre_group], EachGroupLen);
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** 函数名称: FreConverInfo
** 功能描述: 定频,跳频判断
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void FreConverInfo(void){
if (flgs.freconvswitch){
if((IO0PIN & 0X00400000) == 0X00400000)
{
flgs.freconvon = 1;
}
else
{
flgs.freconvon = 0;
CtrlOut(fre_char2[0],0x03);
}
}
}
/*********************************************************************************************************
** 函数名称: WarnInfo
** 功能描述: 告警信息采集及处理 P0.18:0.20--->tm,vswr,ld
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年11月28日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WarnInfo(void){
INT8U temp[4];
temp[0] = (IO0PIN & 0X00900000) >> 16;
temp[1] = warn_info ^ temp[0];
if (temp[1] != 0x00 ){
warn_info = temp[0];
if (temp[0] == 0x80)
{
flgs.warn = 0;
temp[2] = 0x00;
pow_value = back.ppow;
CtrlOut(pow_value,0x0f);
LedRefresh(pow_value,0x0f);
}
else
{
flgs.warn = 1;
temp[2] = 0x80;
pow_value = 0x01;
CtrlOut(pow_value,0x0f);
LedRefresh(pow_value,0x0f);
}
UART_write(1, &temp[2], 1, 3);
}
}
/*********************************************************************************************************
** 函数名称: InfoGather
** 功能描述: 告警,键盘信息采集
** 输 入: pdata
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void InfoGather(void *pdata){
pdata = pdata;
GetE2RomData();
while (1) {
FreConverInfo(); //定频,跳频检测 P0.22
WarnInfo(); //告警检测
KeyInfo(); //键盘信息采集
}
}
/*********************************************************************************************************
** 函数名称: KeyInfo
** 功能描述: 键盘信息采集及处理
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年11月27日
** 描 述: 增加防干扰措施,及调整按键时间
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void KeyInfo(void){
#ifdef __DEBUG
INT8U err;
#endif
INT8U ktemp[2];
//if (!flgs.freconvon)
//{ //跳频进行中?
IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16);
IO1CLR = 0Xf0 << 16;
IO1DIR = IO1DIR & 0xff0fffff | (0X30 << 16); //p1.20:21 are used as output port
IO1SET = 0X30 << 16;
OSTimeDly(2);
ktemp[0] = (IO1PIN & (0Xc0 << 16)) >> 16;
if ((ktemp[0] != 0XC0) && (ktemp[0] != 0X00))
{
IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16);
IO1CLR = 0Xf0 << 16;
IO1DIR = IO1DIR & 0xff0fffff | (0X30 << 16); //p1.20:21 are used as output port
IO1SET = 0X30 << 16;
OSTimeDly(20);
ktemp[0] = (IO1PIN & (0Xc0 << 16)) >> 20;
IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16);
IO1CLR = 0Xf0 << 16;
IO1DIR = IO1DIR & 0xff0fffff | (0Xc0 << 16); //p1.20:21 are used as output port
IO1SET = 0Xc0 << 16;
OSTimeDly(10);
ktemp[0] |= (IO1PIN & (0X30 << 16)) >> 20;
flgs.key = (ktemp[0] == 0X00) ? 1 : 0; //防干扰
#ifdef __DEBUG //调试信息
UART_write(0, &ktemp[0], 1, 3);
err = 0x0f;
UART_write(0, &err, 1, 3);
#endif
while (!flgs.key )
{
IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16);
IO1CLR = 0Xf0 << 16;
IO1DIR = IO1DIR & 0xff0fffff | (0X30 << 16); //p1.20:21 are used as output port
IO1SET = 0X30 << 16;
OSTimeDly(7);
ktemp[1] = (IO1PIN & (0Xc0 << 16)) >> 20;
IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16);
IO1CLR = 0Xf0 << 16;
IO1DIR = IO1DIR & 0xff0fffff | (0Xc0 << 16); //p1.20:21 are used as output port
IO1SET = 0Xc0 << 16;
OSTimeDly(7);
ktemp[1] |= (IO1PIN & (0X30 << 16)) >> 20;
#ifdef __DEBUG //调试信息
UART_write(0, &ktemp[1], 1, 3);
err = 0x0f;
UART_write(0, &err, 1, 3);
#endif
flgs.key = (ktemp[1] == ktemp[0]) ? 0:1 ;
KeyDecode(ktemp[0]);
if (flgs.key)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -