Операции CAN-модуля в нормальном режиме



 

Если CAN-модуль работает в нормальном режиме (не в режиме самопроверки), то должен быть как минимум еще один CAN-модуль в сети, настроенный на такую же скорость передачи информации в битах. Второй CAN-модуль может быть настроен на прием сообщений от передающего узла, но должен быть настроен на ту же самую скорость передачи информации в битах. Это необходимо, т.к. передающий CAN-модуль видит, что есть как минимум один узел в CAN-сети, чтобы подтвердить правильную передачу переданного сообщения в сеть. Согласно CAN-протоколу любой узел, который получил сообщение, присылает подтверждение (если программно не отключено), независимо от того, был ли он настроен на получение именно этого сообщения, или нет.

Необходимость второго узла отсутствует в режиме самопроверки (STM). В этом режиме передающий узел формирует свой собственный сигнал. Единственное требование – узел должен быть настроен на любую рабочую скорость передачи информации. Т.о. регистры синхронизации не должны содержать значения, не актуальные для CAN-протокола. 

Порядок выполнения лабораторной работы

 

Настройка отправки сообщения

1) Создание нового проекта.

1.1) В Code Composer Studio создать новый проект Lab9.pjt. Открыть файл Lab9.c и сохранить его в E:\C281x\Labs\Lab9\lab9.c.

1.2) Добавить в проект файлы:

C:\tidcs\c28\dsp281x\v100\DSP281x_headers\source\DSP281x_GlobalVariableDefs.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_PieCtrl.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\ DSP281x_PieVect.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_DefaultIsr.c

C:\tidcs\c28\dsp281x\v100\DSP281x_common\source\DSP281x_CpuTimers.c

C:\tidcs\c28\dsp281x\v100\DSP281x_headers\cmd\F2812_Headers_nonBIOS.cmd

C:\tidcs\c28\dsp281x\v100\DSP281x_common\cmd\F2812_EzDSP_RAM_lnk.cmd

C:\ti\c2000\cgtoolslib\ rts2800_ml.lib

2) Настройка параметров проекта, компоновка проекта и загрузка выходного файла.

2.1) Включить в проект заголовочные файлы: Project → Build Options, в закладке Compiler выбрать Preprocessor и в поле Include Search Path (-i) ввести:

C:\tidcs\C28\dsp281x\v100\DSP281x_headers\include; ..\include

    2.2) Задать глубину стека: Project → Build Options → Linker → Stack Size: 0x400.

    2.3) Закрыть Build Options, кликнув OK.

3) Преобразование файла Lab9.c.

3.1) Настроить в основной программе цикл while( ) таким образом, чтобы каждая отправка осуществлялась через 1 секунду. Сделать прерывание «CPU core timer 0» через каждые 50 мс для увеличения значения “CpuTimer0.InterruptCount”.

3.2) Создать новую структуру в основной программе “ECanaShadow”:

struct ECAN_REGS ECanaShadow;

3.3) В подпрограмме «Gpio_select( )» настроить периферийные функции CANTxA и CANRxA для работы с CAN-модулем:

GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1;

GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1;

3.4) В конце кода программы создать подпрограмму InitCan( ), с помощью которой осуществить следующие шаги:

3.4.1) В регистрах “ECanaRegs.CANTIOC” и “ECanaRegs.CANRIOC” установить биты “TXFUNC” и “RXFUNC”.

3.4.2) Включить режим HECC модуля CAN (регистр “ECanaRegs.CANMC”).

3.4.3) Для получения доступа к регистрам времени установить бит “CCR” регистра “ECanaRegs.CANMC”.

3.4.4) Для передачи запроса инициализации CAN установить флаг “CCE” регистра “ECanaRegs.CANES”.

3.4.5) Установить параметры “BRP”, “TSEG1” и “TSEG2” регистра “ECanaRegs.CANBTC” таким образом, чтобы скорость передачи была 100 кбит/с.

3.4.6) После установки параметров регистра “ECanaRegs.CANBTC” запретить к нему доступ - очистить бит CCR регистра “ECanaRegs.CANMC”.

3.4.7) Отключить все mailboxes, кроме того, который отправляет сообщение, установкой в 0 полей регистра “ECanaRegs.CANME”.

3.5) Для подготовки mailbox#5 к отправке сообщения сделать следующее:

3.5.1) Установить идентификатор сообщения 0x10000000 (бит “IDE” регистра “EcanaMboxes.MBOX5.MSGID”). Также установить бит IDE регистра “EcanaMboxes.MBOX1.MSGID” в 1.

3.5.2) Для установления mailbox#5 передающим, сбросить бит “MD5” регистра “ECanaRegs.CANMD”. Так как мы не имеем доступа к регистру “ECanaRegs.CANMD”, то сделать это следующим образом:

ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;

ECanaShadow.CANMD.bit.MD5 = 0;

ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;

Активировать mailbox#5:

ECanaShadow.CANME.all = ECanaRegs.CANME.all;

ECanaShadow.CANME.bit.ME5 = 1;

ECanaRegs.CANME.all = ECanaShadow.CANME.all;

3.8.3) Установить длину сообщения равной 1 (бит DLC регистра “ECanaMboxes.MBOX5.MSGCTRL”).

4) Присоединение байта данных и отправка.

Теперь надо организовать периодическую загрузку байта данных в mailbox и отправку с помощью цикла while(1). Для этого:

4.1) Из входных портов GPIO-Port B (с 15 по 8 бит) загрузить байт данных в регистр “ECanaMboxes.MBOX5.MDL.byte.BYTE0”.

4.2) Послать запрос передачи mailbox#5. Для этого в регистре “ECanaShadow.CANTRS” установить бит TRS5=1, а все остальные 0. Затем загрузить все это в регистр “ECanaRegs.CANTRS”.

4.3) Как только придет запрос на отправку сообщения, флаг “ECanaRegs.CANTA.bit.TA5” будет установлен в 1.

4.4)Установить бит “ECanaRegs.CANTA.bit.TA5” в исходное состояние:

ECanaShadow.CANTA.all = 0;

ECanaShadow.CANTA.bit.TA5 = 1;

ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;

    5) Тестирование программы.

    5.1) Сбросить ЦСП: Debug → Reset CPU, Debug → Restart.

    5.2) Перейти к главной подпрограмме: Debug → Go main.

    5.3) Запустить программу: Debug → Run.

 

Настройка приема сообщения

1) Создание нового проекта.

1.1) В Code Composer Studio создать новый проект Lab10.pjt. Открыть файл Lab10.c и сохранить его в E:\C281x\Labs\Lab10\lab10.c.

1.2) Добавить в проект файлы:

C:\tidcs\c28\dsp281x\v100\DSP281x_headers\source\DSP281x_GlobalVariableDefs.c

C:\tidcs\c28\dsp281x\v100\DSP281x_headers\source\DSP281x_GlobalVariableDefs.c

C:\tidcs\c28\dsp281x\v100\DSP281x_headers\cmd\F2812_Headers_nonBIOS.cmd

C:\tidcs\c28\dsp281x\v100\DSP281x_common\cmd\F2812_EzDSP_RAM_lnk.cmd

C:\ti\c2000\cgtools\lib\ rts2800_ml.lib

2) Настройка параметров проекта, компоновка проекта и загрузка выходного файла.

2.1) Включить в проект заголовочные файлы: Project → Build Options, в закладке Compiler выбрать Preprocessor и в поле Include Search Path (-i) ввести:  C:\tidcs\C28\dsp281x\v100\DSP281x_headers\include; ..\include

    2.2) Задать глубину стека: Project → Build Options → Linker → Stack Size: 0x400.

    2.3) Закрыть Build Options, кликнув OK.

3) Преобразование файла Lab9.c.

3.1) Открыть файл Lab10.c

Удалить те части программы, которые не будут использоваться в данной лабораторной работе: подпрограмму “cpu_timer0_isr()” и массив LED[8].

3.2) Также от начала основной программы до цикла while(1) удалить все вызовы подпрограмм InitSystem( ) и GpioSelect( ).

Задать новые инструкции для сторожевого таймера:

EALLOW;

SysCtrlRegs.WDKEY = 0x55;

SysCtrlRegs.WDKEY = 0xAA;

EDIS;

3.3) Создать новую структуру в основной программе “ECanaShadow”:

struct ECAN_REGS ECanaShadow;

3.4) Перейти к подпрограмме «Gpio_select( )». Настроить периферийные функции CANTxA и CANRxA:

GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1;

GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1;

3.5) В конце кода программы создать подпрограмму InitCan( ), с помощью которой осуществить следующие шаги:

3.5.1) В регистрах “ECanaRegs.CANTIOC” и “ECanaRegs.CANRIOC” установить биты “TXFUNC” и “RXFUNC”.

3.5.2) Включить режим HECC модуля CAN (регистр “ECanaRegs.CANMC”).

3.5.3) Для получения доступа к регистрам времени установить бит “CCR” регистра “ECanaRegs.CANMC”.

3.5.4) Для передачи запроса инициализации CAN установить флаг “CCE” регистра “ECanaRegs.CANES”.

3.5.5) Установить параметры “BRP”, “TSEG1” и “TSEG2” регистра “ECanaRegs.CANBTC”.

3.5.6) После установления параметров регистра “ECanaRegs.CANBTC” запретить к нему доступ - очистить бит CCR регистра “ECanaRegs.CANMC”.

3.5.7) Отключить все mailboxes кроме того, который отправляет сообщение, установкой в  0 полей регистра “ECanaRegs.CANME”.

3.6) Для подготовки mailbox#1 к приему сообщения сделать следующее:

3.6.1) Установить идентификатор сообщения 0x10000000 (бит “IDE” регистра “EcanaMboxes.MBOX1.MSGID”).

3.6.2) Для установления mailbox#1 принимающим установить бит “MD1” регистра “ECanaRegs.CANMD”. Используя буферные регистры «ECanaShadow.CANMD.all» осуществить запись в регистр “ECanaRegs.CANMD”:

ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;

ECanaShadow.CANMD.bit.MD1 = 1;

ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;

Активировать mailbox#5:

ECanaShadow.CANME.all = ECanaRegs.CANME.all;

ECanaShadow.CANME.bit.ME1 = 1;

ECanaRegs.CANME.all = ECanaShadow.CANME.all;

4) Организация цикла опроса mailbox#1

4.1) Организовать цикл опроса и приема сообщения. Когда сообщение придет, бит “RMP1” регистра “ECanaRegs.CANRMP” станет равным 1. 

С помощью цикла do-while организовать ожидание RMP1=1.

Примечание 1. Рекомендуется скопировать регистры “ECanaRegs.CANRMP” в буферные “ECanaShadow.CANRMP”.

Примечание 2. В цикле ожидания не забывать активировать сторожевой таймер.

     4.2) Как только бит RMP1 станет равным 1следует отправить нулевой байт на порты GPIO-B7…B0:

GpioDataRegs.GPBDAT.all = ECanaMboxes.MBOX1.MDL.byte.BYTE0;

     4.3) Сбросить бит RMP1, записав в него «1»:

ECanaShadow.CANRMP.bit.RMP1 = 1;

ECanaRegs.CANRMP.all = ECanaShadow.CANRMP.all;

5) Тестирование программы.

5.1) Сбросить ЦСП: Debug → Reset CPU, Debug → Restart.

    5.2) Перейти к главной подпрограмме: Debug → Go main.

5.3) Запустить программу: Debug → Run. [6]

 


Дата добавления: 2018-04-15; просмотров: 332; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!