реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Подружить CodeVisionAVR с кусочком кодом
zi4rox
сообщение Apr 6 2009, 09:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



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

Задача: Пытаюсь скомпилить следующий код для приёма байта по 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ой меги?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 6 2009, 10:04
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zi4rox @ Apr 6 2009, 12:58) *
Может просто у кого нибудь есть нормальные заголовочные файлы для 16ой меги?
Вот может с этого и начать? Т.е. найти в вашем компиляторе заголовочный файл для 16 меги и внимательно его почитать? Не верю, что там не описаны регистры SPI.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
otrog
сообщение Apr 6 2009, 10:29
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



2 zi4rox
Поубирайте все
Код
#define SPCR    _SFR_IO8(0x0D)
и им подобные записи. Это уникальный формат WinAVR описания адресов регистров устройств.

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

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


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
GDI
сообщение Apr 6 2009, 13:03
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 6 2009, 13:20
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(otrog @ Apr 6 2009, 13:29) *
2 Сергей Борщ
В CodeVision действительно нет описания битов регистров ИО
Про биты верю.
Не верю, что 
Цитата
что в стандартных header'ах идущих с CVAVR не прописаны описания регистров: SPSR [...], SPDR.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zi4rox
сообщение Apr 6 2009, 15:40
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Всем спасибо за ответы. Помогло, разобрался
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 14:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016