Микроконтроллеры | Подружить CodeVisionAVR с кусочком кодом |
|
---|---|---|
Народ подтолкните пожалуйста в нужном направлении: Задача: Пытаюсь скомпилить следующий код для приёма байта по SPI в ATMega16 (код взят из даташита по 16ой меге - стр. 132).[/i]
Ошибки, вылазящие при компилязции, указывают на то, что в стандартных header'ах идущих с CVAVR не прописаны описания регистров: SPSR (и бит SPIF в частности), SPDR. Порылся в сети - эти регстры описаны в хедерах, идущих с WinAVR. #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) * Я знаю первое что преходит на ум - "Парень, брось и скомпиль в WinAVR" - у мну очень много уже есть в CVAVR и хочу заставить работать его. Может просто у кого нибудь есть нормальные заголовочные файлы для 16ой меги? |
|
|
в CodeVision ненормальный заголовочный файл?) #include <mega16.h> void main(void) // Делаем SPI по этим параметрам: unsigned char read=0; while (1) Но я бы рекомендовал еще сделать прерывание при приеме по SPI. Это упростит обработку. interrupt [SPI_STC] void spi_isr(void) и перед рутиной (while (1) там где) // Чистим флаг прерывания // Включаем прерывания и еще Но вообще SPCR, SPSR это ваше дело - я не знаю ни частоты ни параметров вашего SPI. По даташиту - или что проще, в CodeVision есть генератор кода - он все за вас сделает тут Если используете преревание #include <spi.h> не нужен Вот и все ) Если чего пишите сюда или в аську или на мыл.. |
|
|
2BCluster - спасибо, огромное, что натолкнули на как мне самому кажется более легкое и грамотное решение. Остается в нём только немного разобраться. #include <mega16.h> // Управляющие коды, которые могут быть переданы unsigned char read; void main (void){ // инициализируем порты // инициализируем SPI while (1){ read = spi(0x00); switch(read) Не разберусь как используется вызов spi() - если делать конструкцию, как Вы сказали: read=spi(); * прикрепил схемку, к этой задаче (Мега, получает с ПК управляющий код (байт), анализирует его и выполняет какое то определенное действие (пускай будет моргать светодиодами на порту). Используется SPI, мега получается в режиме salve.) - возможно тоже имеет место быть Про параметры SPI - особо сказать ничего не могу =( Когда настраивал codewizard'ом - то код как у вас получился. Основное, то что Мега - slave |
|
|
Ну про параметры вы должны что-то знать, например тактовую частоту SPI, MSB или LSB идет первым, и т.д. Но суть не в этом. Вы совершенно правы тут: read = spi(0x00); Но все же я не советую пользовать SPI в таком виде. Лучше по прерыванию. |
|
|
На сайте http://123avr.com есть файлы описания от 8 меги до 128 (m8_128.h): #include <mega8.h> // это обычно включаемый файл дл выбраного МК Теперь вы можете использовать примеры на |
|
|
действительно К О III М А Р! Он просто везде и от него никак не избавиться! Он наступает снова и снова! |
|
|
Lastic: действительно К О III М А Р! Он просто везде и от него никак не избавиться! Весеннее обострение.. |
|
|
ппц, и не лень же.... |
|
|
Давал бы чел нормальные конкретные ссылки - только спасибо бы сказали. А отфильтровывать всю "помойку", выискивая в громадной куче навоза жемчужные зерна - уж увольте. |
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |