📄 io_main.c
字号:
{
ACTIV_IO_config_B[i] |= 0xC0;
}
}
}
}
}
void CheckPorts(void)
{
u8 i;
for(i=0;i<6;i++)
Port_In[i]=0;
for(i=0; i < 8; i++)
{
if((GPIOA->CRL & ((u32)0x3 << i*4)) != 0x00)
Port_In[0] |= (u8)GPIOA->ODR & ((u8)0x01 << i);
else
Port_In[0] |= (u8)GPIOA->IDR & ((u8)0x01 << i);
if((GPIOA->CRH & ((u32)0x3<<i*4)) != 0x00)
Port_In[1] |= ((u8)(GPIOA->ODR>>8)) & ((u8)0x01 << i);
else
Port_In[1] |= ((u8)(GPIOA->IDR>>8)) & ((u8)0x01 << i);
}
for(i=0; i < 8; i++)
{
if((GPIOB->CRL & ((u32)0x3<<i*4)) != 0x00)
Port_In[2] |= (u8)GPIOB->ODR & (0x01 << i);
else
Port_In[2] |= (u8)GPIOB->IDR & (0x01 << i);
if((GPIOB->CRH & ((u32)0x3<<i*4)) != 0x00)
Port_In[3] |= ((u8)(GPIOB->ODR>>8)) & (0x01 << i);
else
Port_In[3] |= ((u8)(GPIOB->IDR>>8)) & (0x01 << i);
}
for(i=0; i < 8; i++)
{
if((GPIOC->CRL & ((u32)0x3<<i*4)) != 0x00)
Port_In[4] |= (u8)GPIOC->ODR & (0x01 << i);
else
Port_In[4] |= (u8)GPIOC->IDR & (0x01 << i);
if((GPIOC->CRH & ((u32)0x3<<i*4)) != 0x00)
Port_In[5] |= ((u8)(GPIOC->ODR>>8)) & (0x01 << i);
else
Port_In[5] |= ((u8)(GPIOC->IDR>>8)) & (0x01 << i);
}
}
u32 temp_odr;
void SetPorts(void)
{
u8 i;
temp_odr = GPIOB->ODR;
for(i=0; i < 8; i++)
{
if((GPIOB->CRL & ((u32)0x3<<i*4)) != 0x00)
{
temp_odr &= ~((u8)0x01 << i);
temp_odr |= Port_Out[2] & ((u8)0x01 << i);
}
if((GPIOB->CRH & ((u32)0x3<<i*4)) != 0x00)
{
temp_odr &= ~((u16)0x01 << (i+8));
temp_odr |= (Port_Out[3] & ((u8)0x01 << (i))) << 8;
}
}
GPIOB->ODR = (u32)temp_odr;
temp_odr = GPIOC->ODR;
for(i=0; i < 8; i++)
{
if((GPIOC->CRL & ((u32)0x3<<i*4)) != 0x00)
{
temp_odr &= ~((u8)0x01 << i);
temp_odr |= Port_Out[4] & ((u8)0x01 << i);
}
if((GPIOC->CRH & ((u32)0x3<<i*4)) != 0x00)
{
temp_odr &= ~((u16)0x01 << (i+8));
temp_odr |= (Port_Out[5] & ((u8)0x01 << (i))) << 8;
}
}
GPIOC->ODR = (u32)temp_odr;
}
void ADC_init(void)
{
/**Init ADC1*/
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
adc_init_done = 0x01;
}
u16 GetADC(u8 channel)
{
/*Get ADC Value from channel*/
u16 value;
switch (channel)
{
case 8:
if((GPIOB->CRL & 0xF) != 0x00)
return 0;
break;
case 9:
if((GPIOB->CRL & 0xF0) != 0x00)
return 0;
break;
case 10:
if((GPIOC->CRL & 0xF) != 0x00)
return 0;
break;
case 11:
if((GPIOC->CRL & 0xF0) != 0x00)
return 0;
break;
case 12:
if((GPIOC->CRL & 0xF00) != 0x00)
return 0;
break;
case 13:
if((GPIOC->CRL & 0xF000) != 0x00)
return 0;
break;
case 15:
if((GPIOC->CRL & 0xF00000) != 0x00)
return 0;
break;
default:
return 0;
}
ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
value = ADC_GetConversionValue(ADC1);
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
ADC_Cmd(ADC1, DISABLE);
return value;
}
void CommIO (void)
{
CommTask->CommandNew = FALSE;
switch (CommTask->Command) {
case Cmd_Get_IO_FktA : break;
case Cmd_Set_IO_FktA : break;
case Cmd_Get_IO_FktB : /* GUI Status request of the IO settings */
Get_IO_Configuration_B();
protocol_SendFrame (Rep_Info_IO_FktB, (u8 *)ACTIV_IO_config_B,8);
break;
case Cmd_Set_IO_FktB : /* 3 GUI Settings for the IOs (In/out,ADC,PWM) */
SendTask->ReplyNew = FALSE;
CommTask->Command = Cmd_Idle; /* none */
CommTask->DataLength = 0;
IO_config_B[0] = CommTask->Data[0];
IO_config_B[1] = CommTask->Data[1];
IO_config_B[2] = CommTask->Data[2];
IO_config_B[3] = CommTask->Data[3];
IO_config_B[4] = CommTask->Data[4];
IO_config_B[5] = CommTask->Data[5];
IO_config_B[6] = CommTask->Data[6];
IO_config_B[7] = CommTask->Data[7];
IO_Configuration_B();/* Call IO-function */
break;
case Cmd_Get_IO_FktC : /* GUI Status request of the IO settings */
Get_IO_Configuration_C();
protocol_SendFrame (Rep_Info_IO_FktC, (u8 *)ACTIV_IO_config_C,8);
break;
case Cmd_Set_IO_FktC : /* 3 GUI Settings for the IOs (In/out,ADC,PWM) */
SendTask->ReplyNew = FALSE;
CommTask->Command = Cmd_Idle; /* none */
CommTask->DataLength = 0;
IO_config_C[0] = CommTask->Data[0];
IO_config_C[1] = CommTask->Data[1];
IO_config_C[2] = CommTask->Data[2];
IO_config_C[3] = CommTask->Data[3];
IO_config_C[4] = CommTask->Data[4];
IO_config_C[5] = CommTask->Data[5];
IO_config_C[6] = CommTask->Data[6];
IO_config_C[7] = CommTask->Data[7];
IO_Configuration_C();/* Call IO-function */
break;
case Cmd_Get_ADC : /* 0 GUI Get ADC */
if(adc_init_done == 0)
{
ADC_init();
}
LastADValue = GetADC(CommTask->Data[0]);
SendTask->Data[0] = CommTask->Data[0];//(u8)(LastADValue>>8);
SendTask->Data[1] = (u8)LastADValue;
SendTask->Data[2] = (u8)(LastADValue>>8);
protocol_SendFrame (Rep_Info_ADC, (u8 *)SendTask->Data,3);
break;
case Cmd_Get_EXTInt : break;
case Cmd_Set_EXTInt : break;
case Cmd_Get_PORT : /* 0 GUI Request Input ports */
CheckPorts();
protocol_SendFrame (Rep_Info_PORT, (u8 *)Port_In,6);
break;
case Cmd_Set_PORT : /* 1 GUI Set Output ports */
SendTask->ReplyNew = FALSE;
CommTask->Command = Cmd_Idle; /* none */
CommTask->DataLength = 0;
Port_Out[0] = CommTask->Data[0];
Port_Out[1] = CommTask->Data[1];
Port_Out[2] = CommTask->Data[2];
Port_Out[3] = CommTask->Data[3];
Port_Out[4] = CommTask->Data[4];
Port_Out[5] = CommTask->Data[5];
SetPorts();
break;
case Cmd_Get_Alternate : break;
case Cmd_Set_Alternate : break;
default :
protocol_SendError (Err_NotImplemented);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -