Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

ответ

Отправлено groovy 24 декабря 2009, г. 21:18
В ответ на: откуда я знаю, где эти mcp2510 взяты были и когда... главное, что они есть и надо их запускать... хоть как-нибудь... а 2515 - это еще когда придут! до тех пор без запуска 2510 не дожить :((( поможите, люди добрые! настохерело уже все: 4 разных искходника смотрю - везде все по-разному описано-расписано, голова опухла :((( неужели нет рабочего исходничка, чтобы собрал и заработало сразу?! под AVR-овский SPI?! отправлено пользователем A_R_V 24 декабря 2009, г. 20:34



//******************************************************************************
//
// File Name : 'spi.c'
// Author : Skytrack ltd - Copyright (C) 2008
// Created : 12/07/2008
// Version : 1.0
//
// This code is property of Skytrack company
//
//******************************************************************************

#include <iom48.h>
#include "spi.h"

void SPI_MasterInit(void)
{
DDR_SPI |= (1 << DD_MOSI)|(1 << DD_SCK)|(1 << DD_SS);
DDR_SPI &= ~(1 << DD_MISO);
SPCR = (1 << SPE)|(1 << MSTR);
//SPSR |= (1 << SPI2X);
}

char SPI_MasterTransmit(char cData)
{
SPDR = cData;
while(!(SPSR & (1<<SPIF)));
return SPDR;
}

//end

//******************************************************************************
//
// File Name : 'spi.h'
// Author : Skytrack ltd - Copyright (C) 2008
// Created : 12/07/2008
// Version : 1.0
//
// This code is property of Skytrack company
//
//******************************************************************************

#ifndef SPI_H

#define SPI_H

#define DDR_SPI DDRB
#define DD_SS PB2
#define DD_MOSI PB3
#define DD_MISO PB4
#define DD_SCK PB5

void SPI_MasterInit(void);
char SPI_MasterTransmit(char cData);

#endif

//end


//******************************************************************************
//
// File Name : 'mcp2515.c'
// Author : Skytrack ltd - Copyright (C) 2008
// Created : 12/07/2008
// Version : 1.0
//
// This code is property of Skytrack company
//
//******************************************************************************

#include <iom48.h>
#include <intrinsics.h>
#include "mcp2515.h"
#include "spi.h"

#define CS_LOW PORTB &= ~(1 << PB2);
#define CS_HIGH PORTB |= (1 << PB2);

void MCP2515_Init()
{
DDRD |= (1 << PD7);
PORTD |= (1 << PD7);
DDRB |= (1 << PB2);
CS_HIGH;
}

void MCP2515_SoftReset()
{
CS_LOW;
SPI_MasterTransmit(MCP2515_RESET);
CS_HIGH;
}

void MCP2515_HardReset()
{
PORTD |= (1 << PD7);
__delay_cycles(1600000);
PORTD &= ~(1 << PD7);
__delay_cycles(1600000);
PORTD |= (1 << PD7);
__delay_cycles(1600000);
}

unsigned char MCP2515_Read(unsigned char address)
{
unsigned char nResult;
CS_LOW;
SPI_MasterTransmit(MCP2515_READ);
SPI_MasterTransmit(address);
nResult = SPI_MasterTransmit(0);
CS_HIGH;
return nResult;
}

void MCP2515_Write(unsigned char address, unsigned char data)
{
CS_LOW;
SPI_MasterTransmit(MCP2515_WRITE);
SPI_MasterTransmit(address);
SPI_MasterTransmit(data);
CS_HIGH;
}

unsigned char MCP2515_ReadStatus()
{
unsigned char nResult;
CS_LOW;
SPI_MasterTransmit(MCP2515_STATUS);
nResult = SPI_MasterTransmit(0);
CS_HIGH;
return nResult;
}

void MCP2515_BitMod(unsigned char address, unsigned char mask, unsigned char data)
{
CS_LOW;
SPI_MasterTransmit(MCP2515_BITMOD);
SPI_MasterTransmit(address);
SPI_MasterTransmit(mask);
SPI_MasterTransmit(data);
CS_HIGH;
}

void MCP2515_Rts(unsigned char TXBn)
{
unsigned char RTS_Value = MCP2515_RTS | TXBn;
CS_LOW;
SPI_MasterTransmit(RTS_Value);
CS_HIGH;
}

void MCP2515_Set_Config_Mode()
{
do {
MCP2515_BitMod(0x0F, 0xE0, 0x80);
} while ((MCP2515_Read(0x0E) & 0xE0) != 0x80);
}

void MCP2515_Set_Listen_Mode()
{
MCP2515_BitMod(0x0F, 0xE0, 0x60);
}

void MCP2515_Set_Normal_Mode()
{
do {
MCP2515_BitMod(0x0F, 0xE0, 0x80);
MCP2515_BitMod(0x0F, 0xE0, 0x00);
} while(MCP2515_Read(0x0E) & 0xE0);
}

void MCP2515_Set_Sleep_Mode()
{
do {
MCP2515_BitMod(0x0F, 0xE0, 0x80);
MCP2515_BitMod(0x0F, 0xE0, 0x00);
} while(MCP2515_Read(0x0E) & 0xE0);
}

// end

Ну и открывок кода

__watchdog_reset();
MCP2515_HardReset();
__watchdog_reset();
MCP2515_Set_Config_Mode();

TRACE("MCP2515 IS IN CONFIG MODE\r\n");

// Disable ClkOut
MCP2515_BitMod(CANCTRL, 0x07, 0x00);

// Configure input buffers
MCP2515_Write(RXB0CTRL, 0x00);
MCP2515_Write(RXB1CTRL, 0x00);

// Receive buffer 1 will no be used during this lab
MCP2515_Write(RXM1SIDH, 0xFF);
MCP2515_Write(RXM1SIDL, 0xE0);
MCP2515_Write(RXF2SIDH, 0x00);
MCP2515_Write(RXF2SIDL, 0x00);
MCP2515_Write(RXF3SIDH, 0x00);
MCP2515_Write(RXF3SIDL, 0x00);
MCP2515_Write(RXF4SIDH, 0x00);
MCP2515_Write(RXF4SIDL, 0x00);
MCP2515_Write(RXF5SIDH, 0x00);
MCP2515_Write(RXF5SIDL, 0x00);

if (nVehicle == VEHICLE_MERCEDES)
{
// Set speed
MCP2515_Write(CNF1, 0x4B);
MCP2515_Write(CNF2, 0x8A);
MCP2515_Write(CNF3, 0x01);

MCP2515_Write(RXM0SIDH, 0xFF);
MCP2515_Write(RXM0SIDL, 0xE0);
MCP2515_Write(RXF0SIDH, 0x39);
MCP2515_Write(RXF0SIDL, 0x40);
MCP2515_Write(RXF1SIDH, 0xFF);
MCP2515_Write(RXF1SIDL, 0xE0);
}

// Disable all MCP2515 interrupts
MCP2515_Write(CANINTE, 0x00);

__watchdog_reset();
// Put MCP2515 into Normal Mode
TRACE("MCP2515 TRY NORMAL MODE\r\n");
MCP2515_Set_Normal_Mode();
TRACE("MCP2515 IS IN NORMAL MODE\r\n");

чтение - в цикле

if (MCP2515_ReadStatus() & 0x01) {
unsigned char sidh = MCP2515_Read(RXB0SIDH);
unsigned char sidl = MCP2515_Read(RXB0SIDL);
unsigned char d0 = MCP2515_Read(RXB0D0);
unsigned char d1 = MCP2515_Read(RXB0D1);




Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 34:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru