ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
446741
svstn (25.09.2013 13:17, просмотров: 293)
Имеется микроконтроллер LPC2366 с двумя интерфейсами CAN. Пытаюсь с одного CAN-а (второго) отправить некое сообщение на первый. Инициализирую оба CAN-а: //Предделитель частоты тактирования CAN //0x00 cclk/4; 0x01 cclk/1; 0x02 cclk/2; 0x03 cclk/6; PCLKSEL0 |= (0x02 << 26)|(0x02 << 28) | (2 << 30); /* Power Up the CAN1 and CAN2 controller. */ PCONP |= (1 << 13)|(1 << 14); // настройка пинов CAN1 и CAN2 PINSEL1 |= (0x03 << 10)|(0x03 << 12); PINSEL4 |= (0x01 << 14)|(0x01 << 16); //Сброс CAN1 контроллера CAN1MOD = 0x00000001; //Сброс CAN2 контроллера CAN2MOD = 0x00000001; //CAN1IER = CAN2IER = 0; // Disable Receive Interrupt CAN1GSR = CAN2GSR = 0; // Reset error counter when CANxMOD is in reset //Установка скорости передачи CAN1 контроллера 1 Мбит CAN1BTR = (0x01)|(0x03 << 14)|(0x08 << 16)|(0x07 << 20); //clk = 32 MHz, brp = 2, tsec1 = 9, tsec2 = 8 //Установка скорости передачи CAN2 контроллера 1 Мбит CAN2BTR = (0x01)|(0x03 << 14)|(0x08 << 16)|(0x07 << 20); //CAN1BTR = CAN2BTR = 0x078C0001; VICVECTPRIORITY23 = 0x00; //приоритет вектора VICVECTADDR23 = (unsigned)irq_CAN12; //запись адреса обработчика прерывания VICINTENABLE_bit.CAN12 = 1; //разрешение прерывания vic CAN1IER = 0x00000001; CAN2IER = 0x00000001; //разрешаем прерывание приема //Запуск CAN1 контроллера CAN1MOD = 0x00000000; //Запуск CAN2 контроллера CAN2MOD = 0x00000000; Пытаюсь отправить сообщение: if(CAN2SR_bit.TBS1 == 1) { CAN2TFI1_bit.DLC = 8; // Длина пакета - 8 байт CAN2TID1 = 0x22; // Устанавливаю стандартный кадр, но на него сейчас пофигу, фильтрация все равно отключена и принимающий CAN только один. CAN2TDA1 = 0xAA; //Само сообщение CAN2CMR = 0x21; //Отправляю } В результате выскакивает ошибка stuff error. Подскажите, как диагностировать неполадку и куда копать? На осциллографе высвечивается просто прямоугольный сигнал.