📄 meclib.c
字号:
UINT8 g_ucThermoIsOK = 0;
/************************************************************************
*FUNCTION NAME : b_WriteThermometer *
*DESCRIPTION : 向温度传感器发送命令或数据 *
*INPUT : v_ucCommand:命令或数据 *
************************************************************************/
void b_WriteThermometer(UINT8 v_ucCommand)
{
UINT8 ucI = 0,ucDat = 0;
int immrVal = vxImmrGet();
*M8260_IOP_PDDIR(immrVal) |= DQ_MASK; /* output*/
for(ucI = 0; ucI < 8; ucI ++)
{
ucDat = (v_ucCommand >> ucI) & 0x01;
if(ucDat != 0)
{
*M8260_IOP_PDDAT(immrVal) |= DQ_MASK; /*DQ置1*/
}
else
{
*M8260_IOP_PDDAT(immrVal) &= ~(DQ_MASK);/*DQ置0*/
}
*M8260_IOP_PDDAT(immrVal) &= ~(CLK_MASK); /*CLK置低*/
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
}
}
/************************************************************************
*FUNCTION NAME : Sub_ReadThermometer *
*DESCRIPTION : 从温度传感器读取数据 *
*INPUT : v_ucCommand:命令或数据 *
************************************************************************/
void b_ReadThermometer(UINT16 *v_pwData)
{
UINT8 ucI = 0;
UINT32 wTmpDat = 0;
int immrVal = vxImmrGet();
*M8260_IOP_PDDIR(immrVal) &= ~(DQ_MASK); /*input*/
for(ucI = 0; ucI < 9; ucI ++)
{
*M8260_IOP_PDDAT(immrVal) &= ~(CLK_MASK); /*CLK置低*/
wTmpDat = *M8260_IOP_PDDAT(immrVal) & DQ_MASK;
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
if(wTmpDat != 0)
{
*v_pwData |= (0x01 << ucI);
}
else
{
*v_pwData &= ~(0x01 << ucI);
}
}
}
UINT8 b_ThermometerInit()
{
UINT16 wData = 0;
UINT8 ucData = 0;
UINT8 ucReturn = OK;
int immrVal = vxImmrGet();
*M8260_IOP_PDPAR(immrVal) &= ~(DQ_MASK | CLK_MASK | RST_MASK); /*general I/O*/
*M8260_IOP_PDDIR(immrVal) |= (CLK_MASK | RST_MASK); /* output*/
*M8260_IOP_PDDAT(immrVal) &= ~(RST_MASK); /*RST置低*/
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
*M8260_IOP_PDDAT(immrVal) |= RST_MASK; /*RST置高*/
b_WriteThermometer(READ_CONFIG);
b_ReadThermometer(&wData);
*M8260_IOP_PDDAT(immrVal) &= ~(RST_MASK); /*RST置低*/
wData &= 0x00FF;
/*printf("DS1620's CONFIG: 0x%xh\n.",wData);*/
if((wData & 0x0003)!= 0x0002) /*温度传感器的配置数据需要改变*/
{
ucData = (UINT8) wData;
ucData |= 0x02; /*设为CPU方式*/
ucData &= 0xFE; /*连续转换模式*/
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
*M8260_IOP_PDDAT(immrVal) |= RST_MASK; /*RST置高*/
b_WriteThermometer(WRITE_CONFIG);
b_WriteThermometer(ucData);
*M8260_IOP_PDDAT(immrVal) &= ~(RST_MASK); /*RST置低*/
taskDelay(1);
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
*M8260_IOP_PDDAT(immrVal) |= RST_MASK; /*RST置高*/
b_WriteThermometer(READ_CONFIG);
b_ReadThermometer(&wData);
*M8260_IOP_PDDAT(immrVal) &= ~(RST_MASK); /*RST置低*/
wData &= 0x00FF;
if((wData & 0x0003) == 0x02)
{
/*printf("DS1620's CONFIG successfully changed to: 0x%xh.\n",wData);*/
}
else
{
ucReturn = ERROR;
printf("Failed to change DS1620's CONFIG.\n" );
}
}
/*让DS1620开始工作*/
if(ucReturn == OK)
{
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
*M8260_IOP_PDDAT(immrVal) |= RST_MASK; /*RST置高*/
b_WriteThermometer(START_CONVERT);
*M8260_IOP_PDDAT(immrVal) &= ~(RST_MASK); /*RST置低*/
g_ucThermoIsOK = 1;
}
else
{
g_ucThermoIsOK = 0;
}
return ucReturn;
/*Checking Config*/
}
/************************************************************************
*FUNCTION NAME : bspGetTemperature *
*DESCRIPTION : 采集温度 *
************************************************************************/
UINT8 bspGetTemperature(INT16 *vpResult)
{
UINT8 ucReturn = OK;
int immrVal = vxImmrGet();
UINT16 wData = 0;
UINT8 ucData = 0;
if(g_ucThermoIsOK == 0)
b_ThermometerInit();
if(g_ucThermoIsOK != 1)
{
*vpResult = TEMPERATURE_FAILURE;
ucReturn = ERROR;
}
else
{
*M8260_IOP_PDDAT(immrVal) |= CLK_MASK; /*CLK置高*/
*M8260_IOP_PDDAT(immrVal) |= RST_MASK; /*RST置高*/
b_WriteThermometer(READ_TEMPRERATURE);
b_ReadThermometer(&wData);
*M8260_IOP_PDDAT(immrVal) &= ~(RST_MASK); /*RST置低*/
wData = (wData >> 1) & 0x00FF;
ucData = (UINT8) wData;
*vpResult = (INT16) ucData;
}
return ucReturn;
}
/*******************************************************************************
* 电源相关接口 *
*******************************************************************************/
void Power1_Run_Led(BOOL flag)
{
}
void Power2_Run_Led(BOOL flag)
{
}
void Power3_Run_Led(BOOL flag)
{
}
void Power3_Alarm_Led(BOOL flag)
{
}
void Power1_Alarm_Led(BOOL flag)
{
}
void Power2_Alarm_Led(BOOL flag)
{
}
UINT8 CheckPowerState (void)
{
return 0;
}
void CheckPowerStatus (void)
{
}
void b_GetPowerStatus (unsigned char power[])
{
}
/*******************************************************************************
* GetLinkStatus
*
*/
STATUS GetLinkStatus (void)
{
return (OK);
}
/*******************************************************************************
* b_getMngLinkStatus
*
* 返回mp主控制的网卡的link状态,主板根据链路状态来指示,备板总是报DOWN的状态
*
* RETURNS: 0 - down
* 1 - up
*/
UINT8 b_getMngLinkStatus (void)
{
if (boardIsMaster() == TRUE)
{
if (GetLinkStatus() == ERROR)
return BSP_LINK_DOWN;
else
return BSP_LINK_UP;
}
else
return BSP_LINK_DOWN;
}
/*******************************************************************************
* 时间相关 *
******************************************************************************/
int bspClockInit (void)
{
struct tm tm;
time_t t;
struct timespec tv;
/* set clock to 2000/01/01, 00:00:00 */
tm.tm_mday = 1;
tm.tm_mon = 0;
tm.tm_year = 2000 - 1900;
tm.tm_sec = 0;
tm.tm_min = 0;
tm.tm_hour = 0;
tm.tm_wday = 0;
tm.tm_yday = 0;
tm.tm_isdst= 0;
t = mktime(&tm);
tv.tv_sec = t;
tv.tv_nsec = 0;
if (clock_settime(CLOCK_REALTIME, &tv) == ERROR)
{
printf ("clock_settime err\n");
return (ERROR);
}
/*
printf ("%d-%d-%d %d:%d:%d wday=%d yday=%d isdst=%d\n",
tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec,
tm.tm_wday, tm.tm_yday, tm.tm_isdst);
*/
return (OK);
}
/*******************************************************************************
* sysSetDateTime
*/
void sysSetDateTime (struct tm * DateTime)
{
}
/*******************************************************************************
* sysGetDateTime
*/
STATUS sysGetDateTime (struct tm * DateTime)
{
return (ERROR);
}
STATUS b_SetFileSystemClock (void)
{
return (bspClockInit ());
}
/*******************************************************************************
* sysGetDosDateTime - read RTC datetime
* Return: OK, or ERROR if RTC is fault
*/
void sysGetDosDateTime (DOS_DATE_TIME *dosDateTime)
{
struct tm DateTime;
dosDateTime->dosdt_year = 2000; /* default year */
dosDateTime->dosdt_month = 1; /* default month */
dosDateTime->dosdt_day = 1; /* default day */
dosDateTime->dosdt_hour = 0; /* default hour */
dosDateTime->dosdt_minute= 0; /* default minute */
dosDateTime->dosdt_second= 0; /* default second */
/*sysGetDateTime(&DateTime);*/
if (OK == sysGetDateTime(&DateTime))
{
dosDateTime->dosdt_year = DateTime.tm_year; /* current year */
dosDateTime->dosdt_month = DateTime.tm_mon; /* current month */
dosDateTime->dosdt_day = DateTime.tm_mday; /* current day */
dosDateTime->dosdt_hour = DateTime.tm_hour; /* current hour */
dosDateTime->dosdt_minute= DateTime.tm_min; /* current minute */
dosDateTime->dosdt_second= DateTime.tm_sec; /* current second */
}
}
/*##############################################################################
# 新增接口/板间通讯 #
##############################################################################*/
/* for bootShell*/
STATUS sysRtcInit(void)
{
return (OK);
}
#if 0
/*************************************************************
* bsp_BurnBoot - update bootrom with the specified contents.
*
* RETURNS: OK(0), or ERROR(-1)
*/
extern int WriteToBootFlash(unsigned char *src,int len);
int bsp_BurnBoot(char *pcBuf, unsigned long vLen,int ifcheck)
{
int rc;
if(ifcheck)
{
BOOTVER ori_bootver, new_bootver;
/*校验要更新的boot文件是否正确*/
if (bsp_getRuningBootVerInfo (&ori_bootver) != OK)
return ERROR;
if (bsp_getBootVerInRam (pcBuf, vLen, &new_bootver) != OK)
return ERROR;
if (strcmp(new_bootver.fnctVerName, ori_bootver.fnctVerName) != 0)
{
printf ("bootrom tag mismatch (%s vs %s)\n",
new_bootver.fnctVerName, ori_bootver.fnctVerName);
return ERROR;
}
if(ERROR == bsp_ChkBootVer(pcBuf, vLen))
{
printf ("bootrom in ram check error\n");
return ERROR;
}
}
/*开始将写入boot芯片中*/
rc = WriteToBootFlash (pcBuf,vLen); /*update boot FANLIHAN*/
switch(rc)
{
case 0:
printf (" Boot ROM update successfully \n");
break;
case -1 :
printf (" Boot ROM update failure : The ic isn't amd or sst type chip\n");
return (ERROR);
case -2 :
printf (" Boot ROM update failure : can't erase\n");
return (ERROR);
case -3 :
printf (" Boot ROM update failure : can't program\n");
return (ERROR);
default:
printf (" Boot ROM update failure : other error\n");
return (ERROR);
}
if(ifcheck)
{
/*对写入到boot芯片的中文件进行校验和检查*/
if(ERROR == bsp_ChkRuningBootVer())
{
printf ("Write bootrom check Failed!!\n");
return ERROR;
}
}
return OK;
}
#endif
/*临时,带平台修改后删除*/
/*******************************************************************************
* b_WatchdogEnable - config and startup Watchdog
*/
void b_WatchdogEnable (int count1s)
{
count1s = count1s;
/* mecRegWrite (0x44, 0x01);*/
return;
}
/*******************************************************************************
* b_WatchdogDisable - disable watchdog
*/
void b_WatchdogDisable (void)
{
mecRegWrite (0x44, 0x0);
}
/*******************************************************************************
* b_WatchdogClear - clear Watchdog
*/
void b_WatchdogClear (void)
{
static UINT8 flag;
flag = flag ? 0x0 : 0x1;
mecRegWrite (0x40, flag);
}
/*******************************************************************************
* b_getBoardType
*/
UINT32 b_getBoardType (void)
{
UINT32 BoardType = 0;
BoardType = (mecRegRead(0x00) << 8) | (mecRegRead(0x04) & 0x1F);
return BoardType;
}
char *bsp_GetBoardName(void)
{
return "GCSA";
}
/*******************************************************************************
* b_cardReset - 复位本板
*/
void b_cardReset (void)
{
bsp_ResetBoard();
}
int b_getNvramSize (void)
{
return NVRAM_8540_SIZE;
}
int b_getFlashSize (void)
{
return FLASH_8540_SIZE;
}
/*******************************************************************************
* b_getCpldVer
*/
UINT8 b_getCpldVer (void)
{
return (mecRegRead(0x08));/*洪涛:2006-10-25:经过验证,原先 的地址错误: return (mecRegRead(0x0C));*/
}
/*******************************************************************************
* b_getPcbVer
*/
UINT8 b_getPcbVer (void)
{
UINT8 val;
val = mecRegRead(0x04);
val = (val & 0xE0) >> 5;
return (val);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -