📄 st16c2550.c
字号:
*AT91C_PIOA_CODR|=(CSB);
*AT91C_PIOA_CODR|=(IOR);
InputData();
*AT91C_PIOA_SODR|=(IOR);
*AT91C_PIOA_SODR|=(CSB);
}
void send_portB_char(unsigned char mdata)
{
*AT91C_PIOA_CODR|=(A0|A1|A2);
*AT91C_PIOA_CODR|=(CSB);
*AT91C_PIOA_CODR|=(IOW);
OutputData(mdata);
mDelay1_2uS( );
*AT91C_PIOA_SODR|=(IOW);
*AT91C_PIOA_SODR|=(CSB);
}
void send_portA_char(unsigned char mdata)
{
*AT91C_PIOA_CODR|=(A0|A1|A2);
*AT91C_PIOA_CODR|=(CSA);
*AT91C_PIOA_CODR|=(IOW);
OutputData(mdata); //
mDelay1_2uS( );
*AT91C_PIOA_SODR|=(IOW);
*AT91C_PIOA_SODR|=(CSA);
}
/*****************************************************************
连接视频的RS-485 接口
******************************************************************/
void IRQ0_pio_c_irq_handler ()
{
/* int j;
int i_temp;
*AT91C_PIOA_CODR|=(A0|A2);//读状态
*AT91C_PIOA_SODR|=(A1);
*AT91C_PIOA_CODR|=(CSB);
*AT91C_PIOA_CODR|=(IOR);
//mDelay1_2uS( );
receiver_portb_state=InputData();//读中断的状态
*AT91C_PIOA_SODR|=(IOR);
*AT91C_PIOA_SODR|=(CSB);
// if((receiver_portb_state&0x04)==0x04)
// {
*AT91C_PIOA_CODR|=(A0|A1|A2); //读数据
*AT91C_PIOA_CODR|=(CSB);
*AT91C_PIOA_CODR|=(IOR);
// mDelay1_2uS( );
receiverdata_portB=InputData();
*AT91C_PIOA_SODR|=(IOR);
*AT91C_PIOA_SODR|=(CSB);
if((receiver_portb_state&0x04)==0x04)
{
if(receiverdata_portB=='$') IsGyrohead=1;
if(IsGyrohead==1)
{
Gyrodata[gyro_pos]=receiverdata_portB;
if(gyro_pos>=99 ||receiverdata_portB==0x0A )
{
IsGyrohead=0;
i_temp=1;
if(Gyrodata[1]=='C')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
str_compass[j]=Gyrodata[i_temp];
if(str_compass[j]=='P'|| i_temp>= gyro_pos ||j>10) break;
}
str_compass[j]=0;
//compass=atof((char const *)gyrostrTemp);
if(Gyrodata[i_temp]=='P')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
str_pitch[j]=Gyrodata[i_temp];
if(str_pitch[j]=='R'|| i_temp>= gyro_pos ||j>10) break;
}
str_pitch[j]=0;
//pitch=atof((char const *)gyrostrTemp);
if(Gyrodata[i_temp]=='R')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
str_roll[j]=Gyrodata[i_temp];
if(str_roll[j]=='X'|| i_temp>= gyro_pos ||j>10) break;
}
str_roll[j]=0;
//roll=atof((char const *)gyrostrTemp);
}
}
}// if(Gyrodata[1]=='C')
gyro_pos=0;
}//if(gyro_pos>=100 ||receiverdata==0x0A )
else
{
++gyro_pos;
}
}
}
*/
}
/***********************************
读罗盘数据
***********************************/
void IRQ1_pio_c_irq_handler ()
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
AT91C_BASE_AIC->AIC_ICCR = AT91C_ID_IRQ1; // 清除 中断
AT91C_BASE_AIC->AIC_EOICR = 0; // 中断结束信号
OS_EXIT_CRITICAL();
int j;
int i_temp;
*AT91C_PIOA_CODR|=(A0|A2);//读状态
*AT91C_PIOA_SODR|=(A1);
*AT91C_PIOA_CODR|=(CSA);
*AT91C_PIOA_CODR|=(IOR);
//mDelay1_2uS( );
receiver_porta_state=InputData();//读中断的状态
*AT91C_PIOA_SODR|=(IOR);
*AT91C_PIOA_SODR|=(CSA);
// if((receiver_porta_state&0x04)==0x04)
// {
*AT91C_PIOA_CODR|=(A0|A1|A2); //读数据
*AT91C_PIOA_CODR|=(CSA);
*AT91C_PIOA_CODR|=(IOR);
// mDelay1_2uS( );
receiverdata_portA=InputData();
*AT91C_PIOA_SODR|=(IOR);
*AT91C_PIOA_SODR|=(CSA);
if((receiver_porta_state&0x04)==0x04)
{
if(receiverdata_portA=='$') IsGyrohead=1;
if(IsGyrohead==1)
{
Gyrodata[gyro_pos]=receiverdata_portA;
if(gyro_pos>=99 ||receiverdata_portA==0x0A )
{
IsGyrohead=0;
i_temp=1;
posflag=0;
if(Gyrodata[1]=='C')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
str_compass[j]=Gyrodata[i_temp];
if(str_compass[j]=='P'|| i_temp>= gyro_pos ||j>10)
{
posflag|=0x01;
str_compass[j]=0;
break;
}
}
// str_compass[j]=0;
//compass=atof((char const *)gyrostrTemp);
if(Gyrodata[i_temp]=='P')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
str_pitch[j]=Gyrodata[i_temp];
if(str_pitch[j]=='R'|| i_temp>= gyro_pos ||j>10)
{
posflag|=0x02;
str_pitch[j]=0;
break;
}
}
// str_pitch[j]=0;
//pitch=atof((char const *)gyrostrTemp);
if(Gyrodata[i_temp]=='R')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
str_roll[j]=Gyrodata[i_temp];
if((str_roll[j]=='T')||( i_temp>= gyro_pos )||(j>10)) //由于罗盘输出格式的问题,为了兼容,故判断了两种格式
{
posflag|=0x04;
str_roll[j]=0;
//roll=atof((char const *)gyrostrTemp);
break;
}
else if((str_roll[j]=='X')||( i_temp>= gyro_pos)||(j>10))
{
poscount=0;
str_roll[j]=0;
break;
}
// str_roll[j]=0;
//roll=atof((char const *)gyrostrTemp);
}
if(Gyrodata[i_temp]=='T')
{
for(j=0;j<gyro_pos;++j)
{
++i_temp;
Temperater[j]=Gyrodata[i_temp];
if((str_roll[j]=='X')||( i_temp>= gyro_pos)||(j>10))
{
posflag|=0x08;
poscount=0;
Temperater[j]=0;
break;
}
}
}
}
}
}// if(Gyrodata[1]=='C')
gyro_pos=0;
}//if(gyro_pos>=100 ||receiverdata==0x0A )
else
{
++gyro_pos;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -