Настройка приема сообщения
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]