ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
167896
dvf (01.10.2009 09:46, просмотров: 2275) MBedder
Вот код для AT90CAN...: void can_Set_mob_Rx(void) { Can_clear_rtr(); Can_set_mob(MOB_rx);// Выбор mob: #define Can_set_mob(mob) { CANPAGE = ((mob) << 4);} Can_set_mask_mob(); // Принимать конкретные адреса Can_set_dlc(2); // Длина пакета 2 байта Can_clear_rplv(); // Без ответа CANIDT1 = 0x68; CANIDT2 = 0x00; CANIDT3 = 0x00; CANIDT4 = 0x00; Can_config_rx(); // На прием } void can_Set_mob_Tx(void) { Can_set_mob(MOB_tx); // Выбор mob CANIDT1 = 0x66; CANIDT2 = 0x00; CANIDT3 = 0x00; CANIDT4 = 0x00; Can_set_dlc(2); // Длина пакета 2 байта for(U8 i = 0; i < (Can_get_dlc()); i++) CANMSG = Tx_Data[i]; // запись в CANMSG Can_clear_rtr(); Can_clear_status_mob(); // Очищаем все флаги регистра состояния MOb Can_config_tx(); // Передача } Передача инициируется событием. Все проходит хорошо - отправляется и принимается вторым узлом. Далее, я считал, что MOb на прием уже сконфигурирован и достаточно очистить CANSTMOB = 0x00; Прием у меня по прерыванию от RXOK. Но оно не возникает, пока не будет выполнено перед этим: Can_set_mob(MOB_rx); Это правильное поведение? А если я несколько MOb настрою на прием, то мне для каждого придется выполнить этот шаг? Или надо так понимать, что делая CANSTMOB = 0x00; я очищал страницу MOb на передачу? Совсем запутался...