Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подружить CodeVisionAVR с кусочком кодом
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zi4rox
Народ подтолкните пожалуйста в нужном направлении:

Задача: Пытаюсь скомпилить следующий код для приёма байта по 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ой меги?
Сергей Борщ
Цитата(zi4rox @ Apr 6 2009, 12:58) *
Может просто у кого нибудь есть нормальные заголовочные файлы для 16ой меги?
Вот может с этого и начать? Т.е. найти в вашем компиляторе заголовочный файл для 16 меги и внимательно его почитать? Не верю, что там не описаны регистры SPI.
otrog
2 zi4rox
Поубирайте все
Код
#define SPCR    _SFR_IO8(0x0D)
и им подобные записи. Это уникальный формат WinAVR описания адресов регистров устройств.

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

PS Для себя раньше переписывал иаровские заголовочные файлы под кодевижн, пока не пересел на IAR.
GDI
Надо просто заменить битовые имена конкретными числами или описать их в собственном файле.
Сергей Борщ
Цитата(otrog @ Apr 6 2009, 13:29) *
2 Сергей Борщ
В CodeVision действительно нет описания битов регистров ИО
Про биты верю.
Не верю, что 
Цитата
что в стандартных header'ах идущих с CVAVR не прописаны описания регистров: SPSR [...], SPDR.
zi4rox
Всем спасибо за ответы. Помогло, разобрался
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.