Реализация подключения MCP2515 к DSPIC33E через SPI интерфейс на языке Си

MCP2515 - это высокоскоростной CAN контроллер с совместимым 2.0B протоколом, разработанный Microchip. Он имеет SPI интерфейс для подключения к микроконтроллерам. В данной статье мы рассмотрим реализацию подключения MCP2515 к DSPIC33E через SPI интерфейс на языке Си.

Подключение MCP2515 к DSPIC33E

Для подключения MCP2515 к DSPIC33E через SPI интерфейс необходимо подключить:

  1. Микроконтроллер
  2. MCP2515

Микроконтроллер и MCP2515 нужно подключить по следующей схеме:

На блоке MCP2515 есть три вывода, которые сигнализируют состояние работы контроллера. Эти выводы - это:

  1. INT - линия прерывания
  2. TX0RTS - линия запроса передачи сообщения 0
  3. TX1RTS - линия запроса передачи сообщения 1

Эти выводы необходимы для управления передачей сообщений в CAN шине.

Реализация подключения MCP2515 к DSPIC33E через SPI интерфейс

Для реализации подключения MCP2515 к DSPIC33E через SPI интерфейс необходимо выполнить следующие шаги:

  1. Настроить интерфейс SPI на микроконтроллере
  2. Настроить MCP2515 на работу с CAN шиной
  3. Написать программу для обмена данными между микроконтроллером и MCP2515

1. Настройка интерфейса SPI на микроконтроллере

На DSPIC33E есть аппаратная поддержка SPI интерфейса. Его можно настроить с помощью регистров. Ниже приведен пример настройки SPI интерфейса на языке Си:

SPI1CON1 = 0b0000000000010000; // настройка режима (CKE=0, CKP=0)
SPI1STAT = 0b0000010000001000; // очистка флагов
SPI1CON1bits.SMP = 0; // выбираем 1 отсчет на каждый 2 такта синхросигнала SCK
SPI1CON1bits.SSPEN = 1; // включаем периферию SPI1CON1 для активации нужного пина на выводе DSPIC33

2. Настройка MCP2515 на работу с CAN шиной

Для настройки MCP2515 на работу с CAN шиной необходимо написать последовательность команд для записи в его регистры. Пример настройки MCP2515 на работу с CAN шиной:

    mcp2515_reset();
    mcp2515_write_register(MCP2515_CANCTRL, 0x80);
    uint8_t cnf1 = MCP2515_16MHZ_500KBPS_CFG1;
    uint8_t cnf2 = MCP2515_16MHZ_500KBPS_CFG2;
    uint8_t cnf3 = MCP2515_16MHZ_500KBPS_CFG3;

    mcp2515_write_register(MCP2515_CNF1, cnf1);
    mcp2515_write_register(MCP2515_CNF2, cnf2);
    mcp2515_write_register(MCP2515_CNF3, cnf3);
    mcp2515_write_register(MCP2515_CANINTE, MCP2515_RX0IE | MCP2515_RX1IE);

3. Написание программы для обмена данными между микроконтроллером и MCP2515

Для обмена данными между микроконтроллером и MCP2515 необходимо написать функции чтения и записи регистров MCP2515 через SPI интерфейс. Пример программы на языке Си для обмена данными между микроконтроллером и MCP2515:

#include "mcp2515.h"
#include "spi.h"

void mcp2515_write_register(uint8_t address, uint8_t value)
{
    spi_start();
    spi_write(SPI_WRITE);
    spi_write(address);
    spi_write(value);
    spi_end();
}

uint8_t mcp2515_read_register(uint8_t address)
{
    spi_start();
    spi_write(SPI_READ);
    spi_write(address);
    uint8_t value = spi_read();
    spi_end();
    return value;
}

Заключение

Подключение MCP2515 к DSPIC33E через SPI интерфейс на языке Си - это простой и эффективный способ реализации подключения к CAN шине. Благодаря этому подходу можно получить высокую скорость передачи данных и управления CAN шиной на основе микроконтроллера. В данной статье мы рассмотрели основные шаги реализации подключения MCP2515 к DSPIC33E через SPI интерфейс на языке Си.

Смотри также: