ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
1325947 Топик полностью
IBAH (30.06.2023 16:36, просмотров: 114) ответил AlexBi на Вот тут, кстати, интересный вопрос, нужно ли контролировать сбои аппаратных модулей? Если да, то кого и в каком объеме? Например, тот же СПИ: в режиме внутреннего тактирования, когда все исправно, известно что за 8 тактов байт будет выдан и появится бит готовности передать следующий. При ожидании этого бита в цикле надо ли контролировать время ожидания?
Недавно задавался таким же вопросом, решил - пусть будет 
*
unsigned long BlokRWCC2500(GPIO_TypeDef* CS_Port, unsigned long CS_Pin, unsigned char Adr, unsigned char Val)
  {
  Timer_us_t t1;//таймер для определения аварии
  LL_GPIO_ResetOutputPin(CS_Port, CS_Pin);//CS=0
  StartTimer_us(&t1, TimoutErrCC2500);
  while(LL_GPIO_IsInputPinSet(MISO_Port, MISO_PIN)!=0)
    {//Ожидаем нуля на входе MISO
    if(Timer_us(&t1))
      {//ошибка обмена, истек таймаут
      LL_GPIO_SetOutputPin(CS_Port, CS_Pin);
      return 0x80000000;//сообщение о ошибке
      }
    }
  SpiCC2500RW(Adr,Val);//Отправляем запрос
  StartTimer_us(&t1, TimoutErrCC2500);
  while(SpiCC2500Complit()==0)
    {//ожидаем ответ
    if(Timer_us(&t1))
      {//ошибка обмена, истек таймаут
      LL_GPIO_SetOutputPin(CS_Port, CS_Pin);
      return 0x80000000;//сообщение о ошибке
      }
    }
  unsigned long tmp = SpiCC2500Res(); //считываем ответ  
  LL_GPIO_SetOutputPin(CS_Port, CS_Pin);//CS=!0
  return tmp;
  }


*