📄 8016.c
字号:
void MiniISA_Task (void *pdata)
{
uint8 cmd[4];
uint8 err;
uint8 ucSemErr;
static uint32 MiniISA_Err = 0;
uint32 i;
ISA_CFG_DATA icdCfgData = {0};
uint8 relay;
pdata = pdata;
icdCfgData.ucIrqEn = 1; /* 全局中断使能 */
icdCfgData.ucIrqPrio = 7; /* 中断优先级为7 */
icdCfgData.ucEINTn = 1; /* 使用CPU外部中断号(0 ~ 3) */
icdCfgData.ucIrq0En = 1; /* 中断通道0使能 */
icdCfgData.ucIrq1En = 0; /* 中断通道1禁止 */
icdCfgData.ucIrq2En = 0; /* 中断通道2禁止 */
icdCfgData.ucIrq3En = 0; /* 中断通道3禁止 */
if (OPERATE_FAIL == MiniISAInit(MINIISA0, NULL, &icdCfgData)) {
while (1);
}
OSTimeDly(OS_TICKS_PER_SEC / 3); /* 等待8016A复位完成 */
while (1) {
OSSemPend(MiniISASem,0,&ucSemErr); /* 等待信号量 */
cmd[0] = 0x40;
cmd[1] = 0;
cmd[2] = 0x40;
WriteCmd8016A(cmd, BoardB0); /* 设置IDI0 计数初始为100 */
cmd[0] = 0x41;
cmd[1] = 0;
cmd[2] = 0x48;
WriteCmd8016A(cmd, BoardB0); /* 设置IDI0 计数匹配值101 */
cmd[0] = 0xff;
cmd[1] = 0;
cmd[2] = 0x2B;
WriteCmd8016A(cmd, BoardB0); /* 使能IDI0 计数器匹配中断 */
cmd[0] = 1;
cmd[1] = 0;
cmd[2] = 0x28;
WriteCmd8016A(cmd, BoardB0); /* 使能IDI0 加法计数功能 */
/*
* 中断产生条件,IDI0 输入7 个脉冲产生中断
*/
Wreg8016A(M8016_INT_EN, BoardB0, INTCTR); /* 中断总使能 */
cmd[2] = 0x01; /* 禁能继电器命令 */
relay = 0x01;
for (i=0; i<10; i++) { /* 继电器输出测试 */
cmd[0] = relay;
Write8016A(cmd, BoardB0);
relay <<= 1;
OSTimeDly(OS_TICKS_PER_SEC / 2);
}
for (i = 0; i < 0x10; i++) { /* 输入测试 */
cmd[0] = Rreg8016A(BoardB0, IMB3); /* 读取输入状态 */
Write8016A(cmd, BoardB0);
MiniISAIrqPend(ISA_IRQ_CHN0, 3, &err);
if (err == OS_NO_ERR) {
Int8016A(); /* 8016A中断处理函数 */
MiniISA_Err ++;
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -