Вот вырезка из моего проекта (он вообще-то написан на С++). CAN-модуль в TMS470 не очень сложный, сравним примерно с MiBADC. Это Вам не HET. Так что заработал сразу. Я вообще никогда не загружаю примеры! Изучаю их --- Да. Хорошо читаю описания. В большинстве случаев этого вполне достаточно. Если не помогает --- обращаюсь на фирму. Правда, когда я не давно послал запрос на TI по поводу HET (правильнее бы было на IAR, но они чётко отфутболивают, когда видят, что твой триальный срок компилятора истёк, хотя всё-же берут вопросы на заметку и устраняют свои ляпы. Так было с FlashLoader-ом для TMS470R1A128. Пришлось его ручками доделывать. И обидно было, когда IAR недели через три выложила patch к IAR EWARM 4.30, где на каждый TMS470 сделали свой FlashLoader. В версии 4.31 он уже входит стационарно). Так вот из службы поддержки TI ответили, что мол по микросхеме TMS470 не существует никакой on-line поддержки, а только то, что находится на их сайте в соответствующем разделе. Ну это всё к слову...
Constructor CANBASE ******************************************************************************** ************************************************/ CANBASE::CANBASE( BIT_RATES bitrate, unsigned long lam0, unsigned long lam3, unsigned long gam ) { // Use CANTX pin for the CAN transmit functions CANTIOC.TXFUNC = 1;
// Use CANRX pin for the CAN receive functions CANRIOC.RXFUNC = 1;
// Setup master control register // Enable configuration mode CANMC.CCR = 1; CANMC.ABO = 1; CANMC.DBO = 1;
// Wait until CPU has access to CAN configuration registers while ( !CANES.CCE ) ;
// Setup CAN Bit-Timing Configuration Register CANBTC.REG32 = TSEG1_13 + TSEG2_2 + SJW_1; // BitTime = 16 TQ and CAN module samples only once at the sampling point.
switch( bitrate ) { case BITRATE_10: CANBTC.BRP = 124; CANBTC.SAM = 1; // The CAN module will sample three times break; case BITRATE_20: CANBTC.REG32 = _SAM + TSEG1_7 + TSEG2_2 + SJW_1; // BitTime = 10 TQ and CAN module will sample three times CANBTC.BRP = 99; break;
И т.д. --------- // ----------
}
// Acceptance Mask Registers initialization CANLAM0 = lam0; CANLAM3 = lam3; CANGAM = gam;
// normal operation mode request CANMC.CCR = 0;
// Wait until CAN module is exited the configuration mode while ( CANES.CCE ) ;
Конечно были ещё и инициализация самих mailbox-классов. Думаю всё-же, что примеры TI должны работать. У вас есть устройство --- анализатор CAN-шины ? Человек Вам правильно ответил. Вы сам CAN хорошо знаете ?
|