backup3.c
来自「LWIP在STM32裸机上的移植」· C语言 代码 · 共 434 行
C
434 行
//backup3.c
//================ 12-09 ================//
// if(tim_2)
// {
// printf("\nTxData[0] = 0x%X\n",TxData[0]);
// printf("TxData[1] = 0x%X\n\n",TxData[1]);
// printf("RxData[0] = 0x%X\n",RxData[0]);
// printf("RxData[1] = 0x%X\n",RxData[1]);
// printf("RxData[39] = 0x%X\n\n",RxData[39]);
// for(i=0;i<40;i++)
// printf("RxData[%d] = 0x%X\n",i,RxData[i]);
// printf("=================================\n");
// tim_2 = 0;
// }
//输入模块S1-S4的LED灯
h = 0;
k = 0;
for(i=0;i<40;i++)
{
if((i>0)&&(i%8 == 0))
{
h++;
k = 0;
}
if(RxData[i]>0xD8 || RxData[i]<0x18) //范围:-40 ~ 24
LR_Show[h] |= 1<<k;
else if((RxData[i] == 0xD8)||(RxData[i] == 0x80)) //值为:-128 表示模块没有接
LR_Show[h] &= ~(1<<k);
else
{
k++;
continue; //否则,保持前一时刻的值
}
k++;
}
TxMessage.StdId = 0x01;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 7;
for(h=0;h<5;h++) //5个输入板卡
{
TxMessage.Data[h] = LR_Show[h]; //LR_Show[h];
// if(tim_1)
// {
// printf("LR_Show[%d] = 0x%X\n",h,LR_Show[h]);
// }
}
TxMessage.Data[5] = 0xA5; //前四路输出总线(播出、热线、辅助、主持人监听)
TxMessage.Data[6] = 0x5F; //后两路输出总线(导播监听、直播室监听)
CAN_Transmit(CAN2, &TxMessage); //发送IO信号状态帧
//================ 12-12 ================//
//============================== 输出模块 ===============================//
//============================== 输入模块 ===============================//
//u8 revtim[3] = {0}; //设置时间
//u8 revIP[12] = {0}; //设置IP地址
//u8 Cmd71_SetDataFlg = 0; //协议0x71:设置调音台数据
//u8 Cmd77_SetIPFlg = 0; //协议0x77:设置调音台IP地址
case (0x77): //设置调音台IP地址
// SetIPFlag = 1;
// for(i=0;i<len;i++)
// revIP[i] = revdata[i];
I2C_EE_BufferWrite(revdata,EEP_IP_Address,len);
NVIC_SystemReset();
break;
//================= 12-14 ====================//
printf("\n\nThe InputState Data:\n");
for(i=0;i<240;i++)
{
if((i>0)&&(i%12 ==0))printf("\n");
printf("0x%X ",ReadEEPData[i]);
}
printf("\n\nThe HotFire Data:\n");
for(i=0;i<4;i++)
printf("0x%X ",ReadEEPData[i]);
printf("\n");
printf("\n\nThe OutputSet Data:\n");
for(i=0;i<20;i++)
printf("0x%X ",ReadEEPData[i]);
printf("\n");
printf("\n\nThe OutputGain Data:\n");
for(i=0;i<6;i++)
printf("0x%X ",ReadEEPData[i]);
printf("\n\n");
//第一帧
TxMessage.Data[0] = 0x1; //高4位:信号格式; 低4位:数据包编号
TxMessage.Data[1] = 0x0; //输入模块的物理地址
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0; //6字节汉字码
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第二帧
TxMessage.Data[0] = 0x2;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第三帧
TxMessage.Data[0] = 0x3;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第四帧
TxMessage.Data[0] = 0x4;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
if(TuiziAddr[1] != 0)
{
printf("\rTuiziAddr[1] = 0x%X\n",TuiziAddr[1]);
TxMessage.StdId = TuiziAddr[1];
//第一帧
TxMessage.Data[0] = 0x1; //高4位:信号格式; 低4位:数据包编号
TxMessage.Data[1] = 0x0; //输入模块的物理地址
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0; //6字节汉字码
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第二帧
TxMessage.Data[0] = 0x2;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第三帧
TxMessage.Data[0] = 0x3;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第四帧
TxMessage.Data[0] = 0x4;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
startflg1 &= ~(1<<1); //0xFD;
}
if(TuiziAddr[2] != 0)
{
printf("\rTuiziAddr[2] = 0x%X\n",TuiziAddr[2]);
TxMessage.StdId = TuiziAddr[2];
//第一帧
TxMessage.Data[0] = 0x1; //高4位:信号格式; 低4位:数据包编号
TxMessage.Data[1] = 0x0; //输入模块的物理地址
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0; //6字节汉字码
CAN_Transmit(CAN1, &TxMessage);
//第二帧
TxMessage.Data[0] = 0x2;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
h = CAN_Transmit(CAN1, &TxMessage);
//第三帧
TxMessage.Data[0] = 0x3;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
CAN_Transmit(CAN1, &TxMessage);
//第四帧
TxMessage.Data[0] = 0x4;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
startflg1 &= ~(1<<2); //0xFB;
}
if(TuiziAddr[3] != 0)
{
printf("\rTuiziAddr[3] = 0x%X\n",TuiziAddr[3]);
TxMessage.StdId = TuiziAddr[3];
//第一帧
TxMessage.Data[0] = 0x1; //高4位:信号格式; 低4位:数据包编号
TxMessage.Data[1] = 0x0; //输入模块的物理地址
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0; //6字节汉字码
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第二帧
TxMessage.Data[0] = 0x2;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第三帧
TxMessage.Data[0] = 0x3;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第四帧
TxMessage.Data[0] = 0x4;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
startflg1 &= ~(1<<3); //0xF7;
}
if(TuiziAddr[4] != 0)
{
printf("\rTuiziAddr[4] = 0x%X\n",TuiziAddr[4]);
TxMessage.StdId = TuiziAddr[4];
//第一帧
TxMessage.Data[0] = 0x1; //高4位:信号格式; 低4位:数据包编号
TxMessage.Data[1] = 0x0; //输入模块的物理地址
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0; //6字节汉字码
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第二帧
TxMessage.Data[0] = 0x2;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第三帧
TxMessage.Data[0] = 0x3;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
//第四帧
TxMessage.Data[0] = 0x4;
TxMessage.Data[1] = 0x0;
for(i=2;i<8;i++)
TxMessage.Data[i] = 0xA0;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
startflg1 &= ~(1<<4); //0xEF;
}
//================== 12-19 =======================//
if(TalkKey) //对讲按键(四个按键,每次可以显示多个按键)
{
for(i=0;i<4;i++)
{
if(((TalkKey>>i)& 0x01) == 0x01)
TalkKeyBK ^= 1<<i;
}
TalkKey = 0;
}
//======================= 12-20 =============================//
//原来的测试程序
//当总控模块"主页"按键触发时,转发数据(0x78指令)
if((FaceKeySet & 0x01) == 0x01)
{
Tablen = Tablen/6;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 7;
TxMessage.StdId = 0x021;
for(L=0;L<Tablen;L++)
{
TxMessage.Data[0] = L+1;
for(i=0;i<6;i++)
TxMessage.Data[i+1] = PlayTable[L][i];
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
TxMessage.DLC = 4;
TxMessage.StdId = 0x02B;
TxMessage.Data[0] = RxOutdBData[0]-24; //播出dBFS
TxMessage.Data[1] = RxOutdBData[1]-24;
TxMessage.Data[2] = RxOutdBData[6]-24; //主持人监听dBFS
TxMessage.Data[3] = RxOutdBData[7]-24;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
FaceKeySet &= ~(1<<0); //清除"主页"键(bit0)
FaceKeySet &= 0x0F; //清除高4位
FaceKeySet |= 1<<4; //主页界面显示
}
//New (说明:发送邮箱满的时候,可以等到下一轮循环再次发送)
u8 MainPage = 0;
u8 TabNum = 0;
u8 TransMailBox = 0;
//当总控模块"主页"按键触发时,转发数据(0x78指令)
if((FaceKeySet & 0x01) == 0x01)
{
FaceKeySet &= ~(1<<0); //清除"主页"键(bit0)
FaceKeySet &= 0x0F; //清除高4位
FaceKeySet |= 1<<4; //主页界面显示
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 4;
TxMessage.StdId = 0x02B;
TxMessage.Data[0] = RxOutdBData[0]-24; //播出dBFS
TxMessage.Data[1] = RxOutdBData[1]-24;
TxMessage.Data[2] = RxOutdBData[6]-24; //主持人监听dBFS
TxMessage.Data[3] = RxOutdBData[7]-24;
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
MainPage = 1; //"主页"按键触发标志
TabNum = 0; //序号
Tablen = Tablen/6; //总数
}
if(MainPage) //"主页"按键触发
{
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 7;
TxMessage.StdId = 0x021;
while(Tablen)
{
TxMessage.Data[0] = TabNum+1;
for(i=0;i<6;i++)
TxMessage.Data[i+1] = PlayTable[TabNum][i];
TransMailBox = CAN_Transmit(CAN1, &TxMessage);
if(TransMailBox == CAN_NO_MB)break;
Tablen--;
TabNum++;
}
if(Tablen == 0)MainPage = 0;
}
//==================== 12-21 ========================//
//源程序(CAN发送,等待):
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
if(TuiziAddr[0] != 0)
{
printf("\rTuiziAddr[0] = 0x%X\n",TuiziAddr[0]);
TxMessage.StdId = TuiziAddr[0];
for(i=0;i<4;i++)
{
TxMessage.Data[0] = (InputState[i][7]<<4)|(i+1); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[i][8]; //输入模块地址
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[i][h-1]; //6字节汉字码
while(((CAN1->TSR>>26)& 0x07) == 0);
CAN_Transmit(CAN1, &TxMessage);
}
startflg1 &= ~(1<<0);
}
//New(说明:发送邮箱满的时候,可以等到下一轮循环再次发送):
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;
if(TuiziAddr[0] != 0)
{
printf("\rTuiziAddr[0] = 0x%X\n",TuiziAddr[0]);
TxMessage.StdId = TuiziAddr[0];
if((startflg1 & 0x01) == 0x01)
{
Tuizi1_Cnt = 4;
Tuizi1_Num = 0;
startflg1 &= ~(1<<0);
}
while(Tuizi1_Cnt)
{
TxMessage.Data[0] = (InputState[Tuizi1_Num][7]<<4)|(Tuizi1_Num+1); //高4位信号格式,低4位数据包编号
TxMessage.Data[1] = InputState[Tuizi1_Num][8]; //输入模块地址
for(h=2;h<8;h++)
TxMessage.Data[h] = InputState[Tuizi1_Num][h-1];//6字节汉字码
TransMailBox = CAN_Transmit(CAN1, &TxMessage);
if(TransMailBox == CAN_NO_MB)break;
Tuizi1_Cnt--;
Tuizi1_Num++;
}
if(Tuizi1_Cnt == 0);
}
printf("The BindADData[6] = 0x%X\n",BindADData[6]);
printf("The BindADData[7] = 0x%X\n",BindADData[7]);
printf("The BindADData[4] = 0x%X\n",BindADData[4]);
printf("The BindADData[5] = 0x%X\n",BindADData[5]);
printf("The BindADData[2] = 0x%X\n",BindADData[2]);
printf("The BindADData[3] = 0x%X\n",BindADData[3]);
printf("The BindADData[0] = 0x%X\n",BindADData[0]);
printf("The BindADData[1] = 0x%X\n",BindADData[1]);
printf("\nThe ADGainData3C = 0x%X\n\n",ADGainData[i]);
printf("\nThe ADGainData3A = 0x%X\n\n",ADGainData[i]);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?