При 16Мгц кварце на MCP2510 скорость можно менять только изменением BRP в регистре CNF1 (как я и делаю на протяжении долгого времени), не трогая длину сегментов.
Достаточно добавить в код следующие строчки:
#define FOSC 16000000 #define NTQ 8 #define BRP_VAL(BITRATE) ((FOSC /(2*NTQ*BITRATE))-1)
Тогда следующий код сконфигурирует MCP2510 на работу по CAN со скоростью 125КБит/с:
__mcp_write(CNF1, BRP_VAL(125000)); __mcp_write(CNF2, 0x90); __mcp_write(CNF3, 0x02);
где __mcp_write - функция записи в регистр некоторого значения
Данный вариант отлично работает для скоростей 25К, 50К, 125К, 250К, 500К, 1М.
0,5мкс - это 1TQ? Да, достаточно. 0,5мкс - это 1 бит? Гарантий нет, т.к. при такой длине бита скорость обмена - 2М, а для CAN максимально заявленная скорость 1М, хотя можешь и попробовать.
|