реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Автоопределение скорости CAN AT91SAM7, Не могу никак разобраться..
roland07
сообщение Oct 6 2010, 06:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 11-03-08
Пользователь №: 35 801



Всем привет. Решил начать изучать АРМы. AT91SAM7x256.
Вообщем не совсем понимаю смысл режима ABM.
В даташите написан такой алгориттм определения скорости:

1. Включаем синхросигнал для модуля КАН и прерывания.
2. Кнфигурируем почтовый ящик на прием.
3. Изменяем значение CAN_BR
4. Если ошибки, то пункт 3. Если нет ошибок, то 5
5. Отключем режим ABM. В регистре CAN_BR записана скорость шины.

Я так понимаю, мне нужно реализовать этот алгоритм. Я реализовал. НО:
1. Не пойму зачем нужны тут прерывания? Только для отработки ошибок? Так я эти регистры буду постоянно опрашивать. Пока задача стоит определить скорость.
2. Где смотреть эти ошибки? Когда ставлю заведомо неправильную скорость, регистры CAN_SR или CAN_MSRx не изменяются...
3. Какой смысл в режиме ABM? В книжке написано, что заблокированы счетчики ошибок. Что это значит?

Может есть у кого пример подобной программы? Я был бы признателен.

зы Есть ли какой нить калькулятор, чтоб посчитал регстр CAN_BR при условии кварца 18.432 и at91SAM7x256

Заранее спасибо.

Ваше сообщение, поднимающее тему в нарушение правил, удалил.
Читайте внимательно правила и больше так не делайте.
Модератор


Сообщение отредактировал IgorKossak - Oct 7 2010, 06:35
Go to the top of the page
 
+Quote Post
owl
сообщение Oct 6 2010, 10:56
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 7-08-06
Из: Смоленск
Пользователь №: 19 370



Цитата(roland07 @ Oct 6 2010, 10:14) *
зы Есть ли какой нить калькулятор, чтоб посчитал регстр CAN_BR при условии кварца 18.432 и at91SAM7x256

Заранее спасибо.


//------------------------------------------------------------------------------
/// baudrate calcul
/// \param base_CAN CAN base address
/// \param baudrate Baudrate value (kB/s)
/// allowed values: 1000, 800, 500, 250, 125, 50, 25, 10
/// \return return 1 in success, otherwise return 0
//------------------------------------------------------------------------------
unsigned char CAN_BaudRateCalculate(AT91PS_CAN base_CAN, unsigned int baudrate)
{
unsigned int BRP;
unsigned int PROPAG;
unsigned int PHASE1;
unsigned int PHASE2;
unsigned int SJW;
unsigned int t1t2;
unsigned char TimeQuanta;

base_CAN->CAN_BR = 0;

if (baudrate == 1000)
{
TimeQuanta = 8;
}
else
{
TimeQuanta = 16;
}

BRP = (BOARD_MCK / (baudrate * 1000 * TimeQuanta)) - 1;
//TRACE_DEBUG("BRP = 0x%X\n\r", BRP);
// timing Delay:
// Delay Bus Driver: 50 ns
// Delay Receiver: 30 ns
// Delay Bus Line (20m): 110 ns
if ((TimeQuanta * baudrate * 2 * (50 + 30 + 110) / 1000000) >= 1)
{
PROPAG = (TimeQuanta * baudrate * 2 * (50 + 30 + 110) /
1000000) - 1;
}
else
{
PROPAG = 0;
}
//TRACE_DEBUG("PROPAG = 0x%X\n\r", PROPAG);

t1t2 = TimeQuanta - 1 - (PROPAG + 1);
//TRACE_DEBUG("t1t2 = 0x%X\n\r", t1t2);

if ((t1t2 & 0x01) == 0x01)
{
// ODD
//TRACE_DEBUG("ODD\n\r");
PHASE1 = ((t1t2 - 1) / 2) - 1;
PHASE2 = PHASE1 + 1;
}
else
{
// EVEN
//TRACE_DEBUG("EVEN\n\r");
PHASE1 = (t1t2 / 2) - 1;
PHASE2 = PHASE1;
}
//TRACE_DEBUG("PHASE1 = 0x%X\n\r", PHASE1);
//TRACE_DEBUG("PHASE2 = 0x%X\n\r", PHASE2);

if (1 > (4 / (PHASE1 + 1)))
{
//TRACE_DEBUG("4*Tcsc\n\r");
SJW = 3;
}
else
{
//TRACE_DEBUG("Tphs1\n\r");
SJW = PHASE1;
}
//TRACE_DEBUG("SJW = 0x%X\n\r", SJW);
// Verif
if (BRP == 0)
{
TRACE_DEBUG("BRP = 0 is not authorized\n\r");
return 0;
}

if ((PROPAG + PHASE1 + PHASE2) != (TimeQuanta - 4))
{
TRACE_DEBUG("Pb (PROPAG + PHASE1 + PHASE2) = %d\n\r");
TRACE_DEBUG("with TimeQuanta-4 = %d\n\r");
return 0;
}
base_CAN->CAN_BR = (AT91C_CAN_PHASE2 & (PHASE2 << 0))
+ (AT91C_CAN_PHASE1 & (PHASE1 << 4))
+ (AT91C_CAN_PROPAG & (PROPAG << 8))
+ (AT91C_CAN_SYNC & (SJW << 12))
+ (AT91C_CAN_BRP & (BRP << 16)) + (AT91C_CAN_SMP & (0 << 24));
return 1;

}

Функция настройки частоты CAN как есть.
Автоопределение скорости не пробовал, подсказать ничем не могу.
Для работы с CAN вам потребуется минимум 2 устройства!!!
Частота CAN должна быть достаточно точно выбрана для обоих.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01336 секунд с 7
ELECTRONIX ©2004-2016