Перейти к содержанию
    

Подружить CodeVisionAVR с кусочком кодом

Народ подтолкните пожалуйста в нужном направлении:

 

Задача: Пытаюсь скомпилить следующий код для приёма байта по SPI в ATMega16 (код взят из даташита по 16ой меге - стр. 132).

Вот полный код программы:

 

#include <mega16>

#define DDR_SPI DDRB
#define DD_MISO PORTB.6

#define CMD1 0x01
#define CMD2 0x02
#define CMD3 0x03
#define CMD4 0x04

void SPI_SlaveInit(void)
{
/* Set MISO output, all others input */
DDR_SPI = (1 << DD_MISO);
/* Enable SPI */
SPCR = (1 << SPE);
}

unsigned char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1 << SPIF)))
;
/* Return data register */
return SPDR;
}

void main (void){
SPI_SlaveInit();

while (1){ 

switch(SPI_SlaveReceive())
{
    case CMD1:
        PORTA = 1;
        break;
    case CMD2:
        PORTA = 2;
        break;
    case CMD3:
        PORTA = 3;
        break;
    case CMD4:
        PORTA = 4;
        break;
    default:
        PORTA = 250;
        break;
}

         };
}

 

Ошибки, вылазящие при компилязции, указывают на то, что в стандартных header'ах идущих с CVAVR не прописаны описания регистров: SPSR (и бит SPIF в частности), SPDR.

 

Порылся в сети - эти регстры описаны в хедерах, идущих с WinAVR.

Но при попытке, дописать недостоющие:

 

#define SPCR    _SFR_IO8(0x0D)
#define SPR0    0
#define SPR1    1
#define CPHA    2
#define CPOL    3
#define MSTR    4
#define DORD    5
#define SPE     6
#define SPIE    7

#define SPSR    _SFR_IO8(0x0E)
#define SPI2X   0
#define WCOL    6
#define SPIF    7

взятые из папки WinAVR'a avr\iom16.h в мой заголовок mega16.h получаю теперь ошибку, что компилятор ругается на определение _SFR_IO8(0x0E)

Как исправить это? ) И правильно ли я вообще копаю?

 

* Я знаю первое что преходит на ум - "Парень, брось и скомпиль в WinAVR" - у мну очень много уже есть в CVAVR и хочу заставить работать его.

 

Может просто у кого нибудь есть нормальные заголовочные файлы для 16ой меги?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может просто у кого нибудь есть нормальные заголовочные файлы для 16ой меги?
Вот может с этого и начать? Т.е. найти в вашем компиляторе заголовочный файл для 16 меги и внимательно его почитать? Не верю, что там не описаны регистры SPI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 zi4rox

Поубирайте все

#define SPCR    _SFR_IO8(0x0D)

и им подобные записи. Это уникальный формат WinAVR описания адресов регистров устройств.

 

2 Сергей Борщ

В CodeVision действительно нет описания битов регистров ИО

 

PS Для себя раньше переписывал иаровские заголовочные файлы под кодевижн, пока не пересел на IAR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо просто заменить битовые имена конкретными числами или описать их в собственном файле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Сергей Борщ

В CodeVision действительно нет описания битов регистров ИО

Про биты верю.

Не верю, что 

что в стандартных header'ах идущих с CVAVR не прописаны описания регистров: SPSR [...], SPDR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...