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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 16, 2008 21:13:04

Сообщение 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ой меги?
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Код: Выделить всё

.equ	SPSR	= 0x0e
.equ	SPIF	= 7	; SPI Interrupt Flag
.equ	SPDR	= 0x0f
если правильно понимаю, то в С надо писать так:

Код: Выделить всё

#define SPSR 0x0e 
#define SPIF  0x07 
#define SPDR 0x0f 
попробуйте
Реклама
Родился
Сообщения: 13
Зарегистрирован: Чт апр 02, 2009 10:06:25

Сообщение YKolomiets »

Частенько сталкиваюсь с такой проблемой.
Выхожу из этой ситуации копируя из IAR.
Копирую только :
#define SPR0 0
#define SPR1 1
#define CPHA 2
#define CPOL 3
#define MSTR 4
#define DORD 5
#define SPE 6
#define SPIE 7

А адрес регистра если я не ошибаюсь уже прописан в *.h.
Если нет (хотя такого у меня еще не было) то сделай:
#define SPCR _SFR_IO8(0x0D) измени #define SPCR 0x0D - это адрес регистра (по поводу скобок не помню нужны или нет открой *.h и посмотри как другие регистры заявлены).
Тоже самое и с этим:
#define SPSR _SFR_IO8(0x0E)
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

Регистры все прописаны в CVAVR а битов нет. В IAR кстати тоже биты отключены по умолчанию.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 13
Зарегистрирован: Чт апр 02, 2009 10:06:25

Сообщение YKolomiets »

Вы не правы ikarab. В IAR регистры разложены по битно (может мы разговариваем о разных вещах). Возьмите откройте iom16.h (если не ошибаюсь то так называется).
Реклама
Опытный кот
Аватара пользователя
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57

Сообщение ikarab »

YKolomiets писал(а):Вы не правы ikarab.
Я прав АБСОЛЮТНО ! так как писал о том что писал. Я не писал что битов нет в заголовках IAR.

Я написал что в свойствах проекта IAR по-умолчанию - галочка "элау бит дефенишенс" не отмечена.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 16, 2008 21:13:04

Сообщение zi4rox »

Всем спасибо за ответы, помогло, разобрался.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»