Сфт процедура что это
Сфт процедура что это
Сокращение CAN означает «Controller Area Network». Эта шина широко применяется в промышленнности, особенно в автомобилестроении. Перед тем, как начать использовать шину CAN, нужно хотя бы бегло ознакомиться с её возможностями, см. Ссылки [1]. Сильно вчитываться не стоит, так как можно сломать голову в премудростях протокола. Для начала нужно определиться с параметрами подключения:
Теперь несколько слов о протоколе CAN и о том, как он представлен в AT91SAM7X256.
2. В AT91SAM7X256 имеется только один интерфейс CAN. Скорость, на которую его можно настроить, выбирается из стандартного ряда скоростей 1000, 800, 500, 250, 125, 100, 50, 25, 20, 10 кбод, или кбит/сек. Внимание: атмеловский пример инициализации интерфейса CAN (процедура can.c\CAN_Init) якобы может настраивать скорости 1000, 800, 500, 250, 125, 50, 25, 10 кбод, однако 800 и 10 кбод настраиваются некорректно, а скорости 100 и 25 кбод мне проверить не удалось, так как на другом конце аппаратура их не поддерживала (это была программа PcanView и адаптер USB-CAN компании SYS TEC electronic GmbH, см. Ссылки [2]). Поэтому остаются скорости 1000, 500, 250, 125, 50 (я выбрал 125) кбод.
4. Интерфейс CAN AT91SAM7X256 имеет гибкую систему прерываний. В примере basic-can-project от Atmel прерывания используются на обработку ошибок и на прием и передачу сообщений, хотя реально ничего в обработчике при приеме и передаче не делается, выводятся только диагностические сообщения (передача и прием реальных данных просходят методом поллинга в основном цикле main).
В примере basic-can-project от Atmel бит MIDE используется, но непонятно как. Я у себя принудительно включил стандартный режим.
В примере basic-can-project от Atmel маска настраивается просто от балды. Я у себя задал маску таким образом, чтобы прием сообщения срабатывал только на один адрес.
typedef struct
<
volatile u8 canstate; //состояние CAN. Сюда пишутся константы CAN_IDLE, CAN_SENDING, CAN_RECEIVING.
volatile u8 can_number; //номер интерфейса CAN. Я это поле удалил, так как интерфейс у нас только один.
volatile u8 mailbox_number; //номер mailbox. Именно в его регистры пишутся параметры CanTransfer.
volatile u8 test_can; //переменная для начальной проверки интерфейса CAN.
volatile u32 mode_reg; //в каком состоянии должен находиться mailbox (данные для регистра CAN_MB_MMR).
volatile u32 acceptance_mask_reg; //данные для регистра CAN_MB_MAM.
volatile u32 identifier; //данные для регистра CAN_MB_MID.
volatile u32 data_low_reg; //передаваемые или принимаемые данные (младшие 4 байта из восьми).
volatile u32 data_high_reg; //передаваемые или принимаемые данные (старшие 4 байта из восьми).
volatile u32 control_reg; //данные для регистра CAN_MB_MCR.
volatile u32 mailbox_in_use; //маска для тех ящиков, которые используются (если все 8, то это поле равно 0xFF), я это поле удалил.
volatile s32 size; //размер передаваемых данных, всегда 8. Надо бы это поле тоже удалить.
> CanTransfer;
Например, как работает CAN_Write: если текущая операция чтение (canstate==CAN_RECEIVING), то прерываем её, освобождая CAN (canstate=CAN_IDLE), еще раз проверяем состояние canstate, и если он ==CAN_IDLE, переводим его в состояние передачи (canstate=CAN_SENDING) и запускаем передачу из выбранного почтового ящика (путем записи флага почтового ящика в регистры CAN_TCR и CAN_IER). Внимание! Перед вызовом CAN_Write должны быть проинициализированы все поля CanTransfer, и сделан вызов CAN_InitMailboxRegisters(&canTransfer).
Как работает CAN_Read: если CAN занят (canstate!=CAN_IDLE), то ничего не делаем, выходим. Иначе переводим CAN на операцию чтения (canstate=CAN_RECEIVING), и запускаем прием почтового ящика (путем записи флага почтового ящика в регистр CAN_IER). Таким образом, для приема данных CAN_Read взводит режим в CAN_RECEIVING, и ждет, пока флаг не станет CAN_IDLE.
Как работает CAN_Handler: в режиме приема (определяется по полю MOT регистра CAN_MMRx почтового ящика x) данные выгружаются в структуру CanTransfer, CAN для программы освобождается (canstate=CAN_IDLE), разрешается для ящика прием следующего сообщения. В режиме передачи не делается ничего, просто CAN для программы освобождается (canstate=CAN_IDLE).
Как добавить поддержку CAN в свой проект, процесс по шагам.
1. Добавляем в проект модуль at91lib\peripherals\can\can.c. Я повыкидывал из can.c весь мусорный код (относящийся к другому чипу, у которого два интерфейса CAN), чтобы было понятнее, как все работает.
2. Добавляем в файл at91lib\board\board.h определения ножек для входа и выхода CAN (в этом примере используются только ножка приема и ножка передачи):
// RXD: Receive data output, ножка 46
#define PINS_CAN_TRANSCEIVER_RXD <1
Ненужные определения ножек PIN_CAN_TRANSCEIVER_RS, PIN_CAN_TRANSCEIVER_RXEN и использующий их код я удалил.
3. Добавляем в начало программы (до основного цикла main) код инициализации CAN (в этом примере выбрана скорость 125 кбод):
4. Пишем процедуру для опроса интерфейса CAN (её вызовы тупо вставляем в главный цикл main):
Это все! Проект настроен на прием и передачу данных по CAN.
Здесь приведен пример принципиальной схемы физического подключения интерфейса CAN микроконтроллера ARM AT91SAM7X256 к линии передачи. Здесь линия передачи/приема CAN гальванически развязана от микроконтроллера с помощью DC-DC преобразователя AM1L-0505SH30-NZ (он питает драйвер CAN PCA82C250) и изолятора сигналов ADUM3201BRZ (через этот изолятор сигналы CAN_RxD и CAN_TxD подключаются на ножки микроконтроллера 46 и 47 соответственно).
Для проверки, как работает прием, нужно подключить интерфейс CAN к чему-нибудь, что передает пакеты CAN. Я использовал интерфейс USB-CAN компании Systec Electronic (USB-CANmodul GW-002), Германия. Установка драйверов в систему Windows никаких проблем не вызывает, подключается к компьютеру стандартным шнуром USB.
DB9 мама DB9 папа
2 CANL 1 CANL
7 CANH 2 CANH
На разъеме адаптера USB-CAN используются только ножки 2 и 7. Полная цоколевка коннектора DB9 папа адаптера USB-CAN USB-CANmodul GW-002 показана на рисунке
Для работы с адаптером USB-CANmodul GW-002 имеется готовая тестовая программа PCANView, позволяющая передавать и принимать данные.
Сразу после запуска программа PCANView просит выбрать адаптер USB-CAN USB-CANmodul, с которым будет осуществляться работа (Device-Nr.:), скорость работы CAN (Baudrate:) и номер канала (для двухканального адаптера). В большинстве случаев здесь надо указать только Baudrate (выбрать из выпадающего списка).
После нажатия на OK запустится основоное окно программы.
Message показывает адрес ящика, которому пришло сообщение, равно CAN_MB_MID передающих ящиков 2..7 ARM (задается макросом CANID_TX).
Length показывает длину пакета данных в ящике (в нашем примере всегда 8 байт).
Data тут прыгают данные, которые генерят вызовы rand() в CANpoll программы ARM
Period измеренная длительность между принятыми пакетами CAN в милисекундах
Count счетчик принятых пакетов
RTR-Per. не разобрался, что это такое
RTR-Cnt. не разобрался, что это такое
[Встраивание обмена по CAN в пользовательскую программу]
Для того, чтобы написать собственную программу на компьютере, которая сможет передавать и принимать данные по шине CAN через USB-CANmodul GW-002, компания Systec Electronic предоставила библиотеку USBCAN32.DLL с подробным описанием её функций и примерами кода (см. документацию в архиве по Ссылке [3]).
Комментарии 
Оглавление
Ряд серьезных заболеваний требует точной и быстрой постановки диагноза, благодаря чему удается не только избавить человека от неприятных симптомов, но и спасти его жизнь. В клиниках МЕДСИ используются современные диагностические методики, одна из которых – коронарография – чрезвычайно важна при наличии ишемической болезни сердца, нарушениях ритма и проводимости сердца и других патологиях сердечнососудистой системы. ИБС – заболевание, которое является одной из основных причин смертности во всех странах мира. ИБС диагностируется преимущественно у мужчин после 40 лет, однако коронарографию следует проходить при наличии показаний, вне зависимости от пола. Исследование применяется с середины 20 века, и в развитых странах является вторым по распространенности среди малоинвазивных процедур.
Что такое коронарография
Коронарная ангиография – малоинвазивное исследование сосудов сердца, в ходе которого врач получает рисунок сосудов сердца с помощью введения в артерии рентгенконтрастного вещества. Сегодня данная процедура считается одной из самых информативных в кардиологии в отношении патологии сосудов.
Инвазивность коронарографии заключается в выполнении прокола вены для введения специальной тонкой трубки – катетера, которая в ходе процедуры будет продвинута к сердцу. Ход продвижения катетера контролируется врачом с помощью оборудования. При коронарографии вводят рентгенконтрастное вещество – такое, которое способно поглощать рентгеновские лучи. Благодаря данному веществу и работе рентген-аппарата на экране монитора формируется картина сосудов, и врач может в деталях изучить места сужения артерий и степень данной патологии. Коронарография сосудов сердца редко требует общего наркоза, в подавляющем большинстве случаев достаточно местной анестезии. Исследование не требует длительной госпитализации и имеет высокую диагностическую ценность для определения состояния здоровья пациента, методики его лечения и объема необходимых хирургических манипуляций.
Виды коронарографии отличаются объемом проведения исследования:
В зависимости от методики проведения коронарография сердца может быть следующих видов:
Показания к коронарографии
Показаний к процедуре достаточно много, их список постоянно расширяется, но к наиболее часто встречающимся относят следующие:
Коронарографию сосудов проводят в том числе перед серьезными операциями по трансплантологии, а также для людей с профессиями повышенных рисков – летчиков, космонавтов и других.
Противопоказания
Процедура может быть проведена для любого пациента, однако ее откладывают или проводят с большой осторожностью в некоторых случаях.
При наличии у пациента таких состояний исследование по возможности не проводят до стабилизации здоровья, однако в экстренных случаях коронарография сосудов допустима, так как она имеет большую диагностическую ценность и может быть чрезвычайно важной для спасения жизни человека.
Подготовка к коронарографии
Перед процедурой пациент проходит различные исследования – крови, УЗИ сердца, электрокардиографию, нагрузочный тест и сдает другие анализы, полный список которых назначается лечащим врачом.
Коронарография выполняется в первой половине дня, натощак, и длится от 30 до 120 минут. Если исследование проводят амбулаторно, предварительной госпитализации не требуется, и пациент приходит утром сразу на коронарографию. В стационаре же госпитализация выполняется накануне.
Для уменьшения нервозности перед исследованием проводится инъекция препарата, успокаивающего нервную систему. В процессе выполнения процедуры пациент может наблюдать на экране ход коронарной ангиографии, общаться с врачом, но в некоторых случаях возможно также использование общего наркоза.
Для введения рентгенконтрастного вещества выполняется пункция артерии на руке или бедре, поэтому место пункции следует заранее освободить от волосяного покрова.
Как производится коронарография
Коронарография сердца проводится в специально оснащенной рентген-оборудованием операционной. Пациента подключают к датчикам электрокардиограммы, обрабатывают место прокола вены антисептиками и выполняют местное обезболивание. Когда операционное поле готово, сосуд прокалывают для введения катетера. Он представляет собой тонкую трубочку, которую врач продвигает к устью артерии, контролируя это продвижение с помощью аппаратуры. Когда устье артерии достигнуто, через конец катетера в месте пункции врач начинает подавать контрастное вещество, которое через катетер доходит до сосудов сердца. В это время выполняются рентген-снимки и видеозапись процесса заполнения сосудов веществом. И пациент, и врач могут следить за выполнением коронарографии на экране. Когда снимки сделаны, врач завершает процедуру, извлекая катетер и накладывая на место пункции давящую повязку.
Возможные осложнения
В перечень возможных осложнений входят следующие.
Однако все эти осложнения маловероятны, их суммарная частота составляет не более 2 %, а проведение исследований до процедуры и врачебное наблюдение после нее делают риски для пациентов минимальными.
После коронарографии
Сразу после завершения исследования на место прокола артерии накладывают салфетку и с силой фиксируют ее специальным прибором для остановки кровотечения. Через 10-15 минут салфетку меняют тугой повязкой. В ближайшие 5-10 часов пациент должен находиться под врачебным наблюдением в обычной палате. Срок пребывания в лечебном учреждении зависит в том числе от показателей свертываемости крови. Все это время пациент должен сохранять горизонтальное положение, не разрешается также сгибать руку или ногу, на которой проводилась пункция. Прием пищи возможен сразу после процедуры. Обычно пациент на второй день после процедуры полностью работоспособен и может покинуть палату. Врачи тщательно изучают полученные снимки и видео.
Преимущества проведения коронарографии в МЕДСИ
В клиниках МЕДСИ коронарография сосудов сердца проводится только врачами высшей категории. Для удобства пациентов и получения точных результатов мы предлагаем:
Коронарография сосудов в МЕДСИ позволяет быстро и точно установить диагноз и выбрать наиболее эффективную методику лечения болезни. Звоните, чтобы получить дополнительную информацию и записаться на прием к врачу.
Сфт процедура что это
Сокращение CAN означает «Controller Area Network». Эта шина широко применяется в промышленнности, особенно в автомобилестроении. Перед тем, как начать использовать шину CAN, нужно хотя бы бегло ознакомиться с её возможностями, см. Ссылки [1]. Сильно вчитываться не стоит, так как можно сломать голову в премудростях протокола. Для начала нужно определиться с параметрами подключения:
Теперь несколько слов о протоколе CAN и о том, как он представлен в AT91SAM7X256.
2. В AT91SAM7X256 имеется только один интерфейс CAN. Скорость, на которую его можно настроить, выбирается из стандартного ряда скоростей 1000, 800, 500, 250, 125, 100, 50, 25, 20, 10 кбод, или кбит/сек. Внимание: атмеловский пример инициализации интерфейса CAN (процедура can.c\CAN_Init) якобы может настраивать скорости 1000, 800, 500, 250, 125, 50, 25, 10 кбод, однако 800 и 10 кбод настраиваются некорректно, а скорости 100 и 25 кбод мне проверить не удалось, так как на другом конце аппаратура их не поддерживала (это была программа PcanView и адаптер USB-CAN компании SYS TEC electronic GmbH, см. Ссылки [2]). Поэтому остаются скорости 1000, 500, 250, 125, 50 (я выбрал 125) кбод.
4. Интерфейс CAN AT91SAM7X256 имеет гибкую систему прерываний. В примере basic-can-project от Atmel прерывания используются на обработку ошибок и на прием и передачу сообщений, хотя реально ничего в обработчике при приеме и передаче не делается, выводятся только диагностические сообщения (передача и прием реальных данных просходят методом поллинга в основном цикле main).
В примере basic-can-project от Atmel бит MIDE используется, но непонятно как. Я у себя принудительно включил стандартный режим.
В примере basic-can-project от Atmel маска настраивается просто от балды. Я у себя задал маску таким образом, чтобы прием сообщения срабатывал только на один адрес.
typedef struct
<
volatile u8 canstate; //состояние CAN. Сюда пишутся константы CAN_IDLE, CAN_SENDING, CAN_RECEIVING.
volatile u8 can_number; //номер интерфейса CAN. Я это поле удалил, так как интерфейс у нас только один.
volatile u8 mailbox_number; //номер mailbox. Именно в его регистры пишутся параметры CanTransfer.
volatile u8 test_can; //переменная для начальной проверки интерфейса CAN.
volatile u32 mode_reg; //в каком состоянии должен находиться mailbox (данные для регистра CAN_MB_MMR).
volatile u32 acceptance_mask_reg; //данные для регистра CAN_MB_MAM.
volatile u32 identifier; //данные для регистра CAN_MB_MID.
volatile u32 data_low_reg; //передаваемые или принимаемые данные (младшие 4 байта из восьми).
volatile u32 data_high_reg; //передаваемые или принимаемые данные (старшие 4 байта из восьми).
volatile u32 control_reg; //данные для регистра CAN_MB_MCR.
volatile u32 mailbox_in_use; //маска для тех ящиков, которые используются (если все 8, то это поле равно 0xFF), я это поле удалил.
volatile s32 size; //размер передаваемых данных, всегда 8. Надо бы это поле тоже удалить.
> CanTransfer;
Например, как работает CAN_Write: если текущая операция чтение (canstate==CAN_RECEIVING), то прерываем её, освобождая CAN (canstate=CAN_IDLE), еще раз проверяем состояние canstate, и если он ==CAN_IDLE, переводим его в состояние передачи (canstate=CAN_SENDING) и запускаем передачу из выбранного почтового ящика (путем записи флага почтового ящика в регистры CAN_TCR и CAN_IER). Внимание! Перед вызовом CAN_Write должны быть проинициализированы все поля CanTransfer, и сделан вызов CAN_InitMailboxRegisters(&canTransfer).
Как работает CAN_Read: если CAN занят (canstate!=CAN_IDLE), то ничего не делаем, выходим. Иначе переводим CAN на операцию чтения (canstate=CAN_RECEIVING), и запускаем прием почтового ящика (путем записи флага почтового ящика в регистр CAN_IER). Таким образом, для приема данных CAN_Read взводит режим в CAN_RECEIVING, и ждет, пока флаг не станет CAN_IDLE.
Как работает CAN_Handler: в режиме приема (определяется по полю MOT регистра CAN_MMRx почтового ящика x) данные выгружаются в структуру CanTransfer, CAN для программы освобождается (canstate=CAN_IDLE), разрешается для ящика прием следующего сообщения. В режиме передачи не делается ничего, просто CAN для программы освобождается (canstate=CAN_IDLE).
Как добавить поддержку CAN в свой проект, процесс по шагам.
1. Добавляем в проект модуль at91lib\peripherals\can\can.c. Я повыкидывал из can.c весь мусорный код (относящийся к другому чипу, у которого два интерфейса CAN), чтобы было понятнее, как все работает.
2. Добавляем в файл at91lib\board\board.h определения ножек для входа и выхода CAN (в этом примере используются только ножка приема и ножка передачи):
// RXD: Receive data output, ножка 46
#define PINS_CAN_TRANSCEIVER_RXD <1
Ненужные определения ножек PIN_CAN_TRANSCEIVER_RS, PIN_CAN_TRANSCEIVER_RXEN и использующий их код я удалил.
3. Добавляем в начало программы (до основного цикла main) код инициализации CAN (в этом примере выбрана скорость 125 кбод):
4. Пишем процедуру для опроса интерфейса CAN (её вызовы тупо вставляем в главный цикл main):
Это все! Проект настроен на прием и передачу данных по CAN.
Здесь приведен пример принципиальной схемы физического подключения интерфейса CAN микроконтроллера ARM AT91SAM7X256 к линии передачи. Здесь линия передачи/приема CAN гальванически развязана от микроконтроллера с помощью DC-DC преобразователя AM1L-0505SH30-NZ (он питает драйвер CAN PCA82C250) и изолятора сигналов ADUM3201BRZ (через этот изолятор сигналы CAN_RxD и CAN_TxD подключаются на ножки микроконтроллера 46 и 47 соответственно).
Для проверки, как работает прием, нужно подключить интерфейс CAN к чему-нибудь, что передает пакеты CAN. Я использовал интерфейс USB-CAN компании Systec Electronic (USB-CANmodul GW-002), Германия. Установка драйверов в систему Windows никаких проблем не вызывает, подключается к компьютеру стандартным шнуром USB.
DB9 мама DB9 папа
2 CANL 1 CANL
7 CANH 2 CANH
На разъеме адаптера USB-CAN используются только ножки 2 и 7. Полная цоколевка коннектора DB9 папа адаптера USB-CAN USB-CANmodul GW-002 показана на рисунке
Для работы с адаптером USB-CANmodul GW-002 имеется готовая тестовая программа PCANView, позволяющая передавать и принимать данные.
Сразу после запуска программа PCANView просит выбрать адаптер USB-CAN USB-CANmodul, с которым будет осуществляться работа (Device-Nr.:), скорость работы CAN (Baudrate:) и номер канала (для двухканального адаптера). В большинстве случаев здесь надо указать только Baudrate (выбрать из выпадающего списка).
После нажатия на OK запустится основоное окно программы.
Message показывает адрес ящика, которому пришло сообщение, равно CAN_MB_MID передающих ящиков 2..7 ARM (задается макросом CANID_TX).
Length показывает длину пакета данных в ящике (в нашем примере всегда 8 байт).
Data тут прыгают данные, которые генерят вызовы rand() в CANpoll программы ARM
Period измеренная длительность между принятыми пакетами CAN в милисекундах
Count счетчик принятых пакетов
RTR-Per. не разобрался, что это такое
RTR-Cnt. не разобрался, что это такое
[Встраивание обмена по CAN в пользовательскую программу]
Для того, чтобы написать собственную программу на компьютере, которая сможет передавать и принимать данные по шине CAN через USB-CANmodul GW-002, компания Systec Electronic предоставила библиотеку USBCAN32.DLL с подробным описанием её функций и примерами кода (см. документацию в архиве по Ссылке [3]).
Комментарии 
Сфт процедура что это
Сокращение CAN означает «Controller Area Network». Эта шина широко применяется в промышленности, особенно в автомобилестроении. Перед тем, как начать использовать шину CAN, нужно хотя бы бегло ознакомиться с её возможностями, см. Ссылки [1]. Сильно вчитываться не стоит, так как можно сломать голову в премудростях протокола. Для начала нужно определиться с параметрами подключения:
[Теория]
Теперь несколько слов о протоколе CAN и о том, как он представлен в AT91SAM7X256.
2. В AT91SAM7X256 имеется только один интерфейс CAN. Скорость, на которую его можно настроить, выбирается из стандартного ряда скоростей 1000, 800, 500, 250, 125, 100, 50, 25, 20, 10 кбод, или кбит/сек. Внимание: атмеловский пример инициализации интерфейса CAN (процедура can.c\CAN_Init) якобы может настраивать скорости 1000, 800, 500, 250, 125, 50, 25, 10 кбод, однако 800 и 10 кбод настраиваются некорректно, а скорости 100 и 25 кбод мне проверить не удалось, так как на другом конце аппаратура их не поддерживала (это была программа PcanView и адаптер USB-CAN компании SYS TEC electronic GmbH, см. Ссылки [2]). Поэтому остаются скорости 1000, 500, 250, 125, 50 (я выбрал 125) кбод.
4. Интерфейс CAN AT91SAM7X256 имеет гибкую систему прерываний. В примере basic-can-project от Atmel прерывания используются на обработку ошибок и на прием и передачу сообщений, хотя реально ничего в обработчике при приеме и передаче не делается, выводятся только диагностические сообщения (передача и прием реальных данных происходят методом поллинга в основном цикле main).
В примере basic-can-project от Atmel бит MIDE используется, но непонятно как. Я у себя принудительно включил стандартный режим.
11111111100
11111111101
11111111110
11111111111
В примере basic-can-project от Atmel маска настраивается просто от балды. Я у себя задал маску таким образом, чтобы прием сообщения срабатывал только на один адрес.
Например, как работает CAN_Write: если текущая операция чтение (canstate==CAN_RECEIVING), то прерываем её, освобождая CAN (canstate=CAN_IDLE), еще раз проверяем состояние canstate, и если он ==CAN_IDLE, переводим его в состояние передачи (canstate=CAN_SENDING) и запускаем передачу из выбранного почтового ящика (путем записи флага почтового ящика в регистры CAN_TCR и CAN_IER). Внимание! Перед вызовом CAN_Write должны быть проинициализированы все поля CanTransfer, и сделан вызов CAN_InitMailboxRegisters(&canTransfer).
Как работает CAN_Read: если CAN занят (canstate!=CAN_IDLE), то ничего не делаем, выходим. Иначе переводим CAN на операцию чтения (canstate=CAN_RECEIVING), и запускаем прием почтового ящика (путем записи флага почтового ящика в регистр CAN_IER). Таким образом, для приема данных CAN_Read взводит режим в CAN_RECEIVING, и ждет, пока флаг не станет CAN_IDLE.
Как работает CAN_Handler: в режиме приема (определяется по полю MOT регистра CAN_MMRx почтового ящика x) данные выгружаются в структуру CanTransfer, CAN для программы освобождается (canstate=CAN_IDLE), разрешается для ящика прием следующего сообщения. В режиме передачи не делается ничего, просто CAN для программы освобождается (canstate=CAN_IDLE).
[Практика]
Как добавить поддержку CAN в свой проект, процесс по шагам.
1. Добавляем в проект модуль at91lib\peripherals\can\can.c. Я повыкидывал из can.c весь мусорный код (относящийся к другому чипу, у которого два интерфейса CAN), чтобы было понятнее, как все работает.
2. Добавляем в файл at91lib\board\board.h определения ножек для входа и выхода CAN (в этом примере используются только ножка приема и ножка передачи):
Ненужные определения ножек PIN_CAN_TRANSCEIVER_RS, PIN_CAN_TRANSCEIVER_RXEN и использующий их код я удалил.
3. Добавляем в начало программы (до основного цикла main) код инициализации CAN (в этом примере выбрана скорость 125 кбод):
4. Пишем процедуру для опроса интерфейса CAN (её вызовы тупо вставляем в главный цикл main):
Это все! Проект настроен на прием и передачу данных по CAN.
[Аппаратура]
Здесь приведен пример принципиальной схемы физического подключения интерфейса CAN микроконтроллера ARM AT91SAM7X256 к линии передачи. Здесь линия передачи/приема CAN гальванически развязана от микроконтроллера с помощью DC-DC преобразователя AM1L-0505SH30-NZ (он питает драйвер CAN PCA82C250) и изолятора сигналов ADUM3201BRZ (через этот изолятор сигналы CAN_RxD и CAN_TxD подключаются на ножки микроконтроллера 46 и 47 соответственно).
Для проверки, как работает прием, нужно подключить интерфейс CAN к чему-нибудь, что передает пакеты CAN. Я использовал интерфейс USB-CAN компании Systec Electronic (USB-CANmodul GW-002), Германия. Установка драйверов в систему Windows никаких проблем не вызывает, подключается к компьютеру стандартным шнуром USB.
DB9 мама DB9 папа
2 CANL 1 CANL
7 CANH 2 CANH
На разъеме адаптера USB-CAN используются только ножки 2 и 7. Полная цоколевка коннектора DB9 папа адаптера USB-CAN USB-CANmodul GW-002 показана на рисунке (вид снаружи на штырьки адаптера).
[Программа PCANView]
Для работы с адаптером USB-CANmodul GW-002 имеется готовая тестовая программа PCANView, позволяющая передавать и принимать данные.
Сразу после запуска программа PCANView просит выбрать адаптер USB-CAN USB-CANmodul, с которым будет осуществляться работа (Device-Nr.:), скорость работы CAN (Baudrate:) и номер канала (для двухканального адаптера). В большинстве случаев здесь надо указать только Baudrate (выбрать из выпадающего списка).
После нажатия на OK запустится основное окно программы.
Message показывает адрес ящика, которому пришло сообщение, равно CAN_MB_MID передающих ящиков 2..7 ARM (задается макросом CANID_TX).
Length показывает длину пакета данных в ящике (в нашем примере всегда 8 байт).
Data тут прыгают данные, которые генерят вызовы rand() в CANpoll программы ARM
Period измеренная длительность между принятыми пакетами CAN в миллисекундах
Count счетчик принятых пакетов
RTR-Per. не разобрался, что это такое
RTR-Cnt. не разобрался, что это такое
[Встраивание обмена по CAN в пользовательскую программу]
Для того, чтобы написать собственную программу на компьютере, которая сможет передавать и принимать данные по шине CAN через USB-CANmodul GW-002, компания Systec Electronic предоставила библиотеку USBCAN32.DLL с подробным описанием её функций и примерами кода (см. документацию в архиве по Ссылке [3]).
Аббревиатура MDLC расшифровывается как Mailbox Data Length Code (код длины сообщения). Это поле четырехбитное, и оно присутствует в регистрах CAN_MCRx (используется при передаче) и CAN_MSRx (используется при приеме). Это поле удобно использовать для передачи дополнительной информации, например для передачи кода команды. Однако эта дополнительная возможность работает только в том случае, когда с обоих сторон обмена по шине CAN (со стороны отправителя и получателя) стоят микроконтроллеры AT91SAM7.
4 битами можно закодировать 16 вариантов команд (от 0 до 15), и это весьма полезная возможность, учитывая маленький объем данных полезных данных почтового ящика. Однако помните, что значение MDLC меньше 8 обрезает количество передаваемых данных в ящике. Так например, если указать MDLC=0, то все 8 байт в почтовом ящике придут нулевые. Если указать MDLC=1, то будут переданы данные только в 0 байте (байты 1..7 придут нулевые), если MDLC=2, то только в 0 и 1 байте (байты 2..7 придут нулевые) и так далее. При значении MDLC больше 7 будут приходить данные всех 8 байт ящика.
[Ссылки]