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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Самопрограммирование AVR, Помогите определить причину ошибки
defunct
сообщение May 15 2008, 13:41
Сообщение #16


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Len_OK @ May 15 2008, 16:27) *
а вставку ассемблерную сделать в ИАРе для меня проблематично

Да я Вас понимаю, и еще отмечу, что правильную ассемблерную вставку сделать гораздо сложнее чем писать всю программу на ассемблере.

Цитата
ну хоть под Tiny2313?

Вечером посмотрю как в IAR'е можно выйти из положения (сейчас под рукой нет ни IAR'a, ни Tiny).
Go to the top of the page
 
+Quote Post
muravei
сообщение May 15 2008, 14:22
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Len_OK @ May 15 2008, 17:27) *
Ассемблером почти не пользовалась

Попробуйте АБ
Go to the top of the page
 
+Quote Post
Igor26
сообщение May 15 2008, 18:07
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Я так понял, Вы пользуютесь апнотом от AVR. Те, которые попадались мне, были заточены под Меги. Попробуйте, пользуясь этим апнотом, написать бутлоадер, например, для Меги-8. Когда получиться, тогда приобретенный опыт можно будет применить и к Тинькам. Помоему, с бутлоадером для Меги здесь Вам помогут больше, чем с бутлоадером для Тини. Я в том числе. Здесь многие "грызли" и победили этот вопрос.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 15 2008, 21:32
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Использовать intrinsics для tiny у меня не получилось...
Но можно пойти таким путём.
Создаем и подключием к проекту asm модуль my_spm.s90 сл. содержания (это конечно не оптимальный вариант, но работать можно):
Код
#define SPMCR   0x37
#define SREG    0x3F

        PUBLIC  DoSpm
        
        RSEG    CODE:CODE:NOROOT(1)
        
DoSpm  
        PUSH    R31
        PUSH    R30
        MOVW    R31:R30, R17:R16
        MOVW    R17:R16, R1:R0  // R17:16 pair used as temp space
        MOVW    R1:R0, R19:R18
        CLI
        OUT     SPMCR, R20
        SPM
        SEI
        MOVW    R1:R0, R17:R16  // restore R1:R0 pair
        POP     R30
        POP     R31
        RET

        END     DoSpm


В основной программе объявляем функцию DoSpm:

Код
extern int DoSpm( int addr, int data, char spmcsr_code);


addr - помещается в Z
data - в R1-R0
spmcr_code - в SPMCSR (0x37 I/O space для t13)
и выполняется команда SPM
функция будет возвращать "мусор" (содержимое R1:R0 до вызова функции), на результат не смотрите.


Ну а дальше уже по даташиту делайте то, что вам нужно.
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 16 2008, 07:57
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



Цитата(Igor26 @ May 15 2008, 21:07) *
Попробуйте, пользуясь этим апнотом, написать бутлоадер, например, для Меги-8.

smile.gif Для меги у меня уже давно работает!А для тини(думала получиться аналогичным образом) не получается.Теперь вся сложность состоит в использовании ассемблера...

Цитата(defunct @ May 16 2008, 00:32) *
Использовать intrinsics для tiny у меня не получилось...
Но можно пойти таким путём.
Создаем и подключием к проекту asm модуль my_spm.s90 сл. содержания (это конечно не оптимальный вариант, но работать можно):
Код
#define SPMCR   0x37
#define SREG    0x3F

        PUBLIC  DoSpm
        
        RSEG    CODE:CODE:NOROOT(1)
        
DoSpm  
        PUSH    R31
        PUSH    R30
        MOVW    R31:R30, R17:R16
        MOVW    R17:R16, R1:R0  // R17:16 pair used as temp space
        MOVW    R1:R0, R19:R18
        CLI
        OUT     SPMCR, R20
        SPM
        SEI
        MOVW    R1:R0, R17:R16  // restore R1:R0 pair
        POP     R30
        POP     R31
        RET

        END     DoSpm


В основной программе объявляем функцию DoSpm:

Код
extern int DoSpm( int addr, int data, char spmcsr_code);


addr - помещается в Z
data - в R1-R0
spmcr_code - в SPMCSR (0x37 I/O space для t13)
и выполняется команда SPM
функция будет возвращать "мусор" (содержимое R1:R0 до вызова функции), на результат не смотрите.
Ну а дальше уже по даташиту делайте то, что вам нужно.

Вроде всё так сделала, но появляется ошибка
Error[e46]: Undefined external "DoSpm" referred in main ( E:\Len_OK\iar\work_flash\test3\Debug\Obj\main.r90 )
Go to the top of the page
 
+Quote Post
defunct
сообщение May 16 2008, 09:38
Сообщение #21


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Len_OK @ May 16 2008, 10:57) *
Вроде всё так сделала, но появляется ошибка
Error[e46]: Undefined external "DoSpm" referred in main ( E:\Len_OK\iar\work_flash\test3\Debug\Obj\main.r90 )

А вы подключили файл к проекту?
workspace->правой кнопкой мыши на названии проекта->Add->add files... ->my_spm.s90

или через меню Project->Add files->assembler files->my_spm.s90
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 16 2008, 09:48
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



Цитата(defunct @ May 16 2008, 12:38) *
А вы подключили файл к проекту?
workspace->правой кнопкой мыши на названии проекта->Add->add files... ->my_spm.s90

или через меню Project->Add files->assembler files->my_spm.s90

Да,всё поправила, но теперь теперь ругань на
Error[Pe020]: identifier "PUBLIC" is undefined E:\Len_OK\iar\work_flash\test3\asm.s90 4
Error[Pe065]: expected a ";" E:\Len_OK\iar\work_flash\test3\asm.s90 6
Warning[Pe012]: parsing restarts here after previous syntax error E:\Len_OK\iar\work_flash\test3\main.c 9


Цитата(Len_OK @ May 16 2008, 12:43) *
Да,всё поправила, но теперь теперь ругань на
Error[Pe020]: identifier "PUBLIC" is undefined E:\Len_OK\iar\work_flash\test3\asm.s90 4
Error[Pe065]: expected a ";" E:\Len_OK\iar\work_flash\test3\asm.s90 6
Warning[Pe012]: parsing restarts here after previous syntax error E:\Len_OK\iar\work_flash\test3\main.c 9


а если немного меняю define и у меня выходит такая вот картина

#ifdef __IAR_SYSTEMS_ASM__
#define SPMCR 0x37
#define SREG 0x3F
NAME DoSpm
public DoSpm

COMMON INTVEC
ORG INT0_vect
rjmp SIG_INTERRUPT0
RSEG CODE:CODE:NOROOT(1)


#endif /* __IAR_SYSTEMS_ASM__ */


DoSpm:
PUSH R31
PUSH R30
MOVW R31:R30, R17:R16
MOVW R17:R16, R1:R0 // R17:16 pair used as temp space
MOVW R1:R0, R19:R18
CLI
OUT SPMCR, R20
SPM
SEI
MOVW R1:R0, R17:R16 // restore R1:R0 pair
POP R30
POP R31
RET

END DoSpm
то ошибки уже такие
Error[Pe077]: this declaration has no storage class or type specifier E:\Len_OK\iar\work_flash\test3\asm.s90 15
Error[Pe065]: expected a ";" E:\Len_OK\iar\work_flash\test3\asm.s90 15
Warning[Pe012]: parsing restarts here after previous syntax error E:\Len_OK\iar\work_flash\test3\main.c 9
Error[Pe109]: expression must have (pointer-to-) function type E:\Len_OK\iar\work_flash\test3\main.c 45
Go to the top of the page
 
+Quote Post
defunct
сообщение May 16 2008, 09:55
Сообщение #23


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Len_OK @ May 16 2008, 12:48) *
а если немного меняю define и у меня выходит такая вот картина

#ifdef __IAR_SYSTEMS_ASM__
#define SPMCR 0x37
#define SREG 0x3F
NAME DoSpm // <-- не нужно
public DoSpm

COMMON INTVEC // Не нужно
ORG INT0_vect // <--- не нужно!
rjmp SIG_INTERRUPT0 // <--- НЕ НУЖНО
RSEG CODE:CODE:NOROOT(1) // <--- должно быть перед меткой всегда
#endif /* __IAR_SYSTEMS_ASM__ */
DoSpm: // <-- ":" лишнее

Погодите, вставьте в asm файл все как есть из комента выше!
После метки "DoSpm" двоеточие ":" не нужно !
Какая у вас версия IAR'a?

Компилирующийся проект смотрите в атаче.
Прикрепленные файлы
Прикрепленный файл  SpmTest.zip ( 12.74 килобайт ) Кол-во скачиваний: 36
 
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 16 2008, 10:17
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



Цитата(defunct @ May 16 2008, 12:55) *
Какая у вас версия IAR'a?

IAR4.11
Go to the top of the page
 
+Quote Post
defunct
сообщение May 16 2008, 10:21
Сообщение #25


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Len_OK @ May 16 2008, 13:17) *
IAR4.11

Это хорошо, значит пример из атача предыдущего комента должен собираться без проблем (проверил на 4.11A).
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 16 2008, 10:23
Сообщение #26


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



[quote name='Len_OK' post='412200' date='May 16 2008, 13:17']
IAR4.11
[/quote]


Ваш проект компилится на "ура"!
не могу понять в чем причина, я точно такой же проект создала с нуля, в нем вот такие ошибки
Error[Pe020]: identifier "PUBLIC" is undefined E:\Len_OK\iar\work_flash\test3\asm.s90 4
Error[Pe065]: expected a ";" E:\Len_OK\iar\work_flash\test3\asm.s90 6

Может в настройках что-то ещё устанавливать нужно
[/quote]

Сообщение отредактировал Len_OK - May 16 2008, 10:24
Go to the top of the page
 
+Quote Post
defunct
сообщение May 16 2008, 10:24
Сообщение #27


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Len_OK @ May 16 2008, 13:23) *
Может в настройках что-то ещё устанавливать нужно

Сравните по настройкам с моим. Я создавал так:
Project -> Create New -> C -> main.
потом создал файл my_spm.s90
подключил его к проекту
скопировал содержимое из форума.
Выбрал тип процессора в настройках проекта - tiny13.
ну и собсно все..

Цитата
is undefined E:\Len_OK\iar\work_flash\test3\asm.s90

Совсем дикая идея - может нельзя файл называть именем "asm"? т.к. может пересекается с ключевым словом компилятора.
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 16 2008, 10:39
Сообщение #28


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



есть ли разница между расширениями х.s90 и х.s?
Я изначально создавала х.s файл
Создала проект заново, кажется всё откомпилилось! smile.gif Спасибо
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 20 2008, 09:26
Сообщение #29


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



Решилась проблемка с записью во флешку ! Теперь можно использовать стандартные макросы для самопрограммирования и для МК Tiny с помощью IAR EW v5.10.


Только теперь не могу разобраться с таким трабло, когда данные записываются неверно!
При попытке записать страницу нулей, в одной из ячеек появляется значение 0хЕF
Может заполнение буфера производится некорректно!


do
{ fl_data=*(temp_buf+Buf_Adres+1);
fl_data<<=8;
fl_data|=*(temp_buf+Buf_Adres);
_FILL_TEMP_WORD(Buf_Adres,fl_data);
Buf_Adres+=2;
} while (Buf_Adres<32);

Сообщение отредактировал Len_OK - May 20 2008, 09:27
Go to the top of the page
 
+Quote Post
Len_OK
сообщение May 22 2008, 10:29
Сообщение #30


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 5-12-07
Пользователь №: 32 986



Помогите разобраться почему не пишутся данные во флеш(пытаюсь записать 2 байта )

#include <ioavr.h>

#define SPMCR 0x37
#define SREG 0x3F

PUBLIC DoSpm
EXTERN flash_data
EXTERN fl_data
EXTERN flash_adr
EXTERN hash
EXTERN st_hash
RSEG CODE:CODE:NOROOT(1)

DoSpm
//*************fill temp bufer*************
PUSH R31
PUSH R30
LDI R16,low(flash_adr)
LDI R17,high(flash_adr)
MOVW R31:R30,R17:R16

LDI R20,low(flash_data)
LDI R21,high(flash_data)
MOVW R1:R0,R21:R20
LDI R16,1
CLI
Wait_spm:
IN R18, 0x37
MOV R19, R18
SBRC R19, 0
RJMP Wait_spm


OUT SPMCR,R16
SPM
SEI

//*****************************************
//******* save data to programm memory*****

MOVW R31:R30,R17:R16

while_EEPROM:// not write to EEPROM
SBIC 0x1C, 0x01
RJMP while_EEPROM

call Wait_spm //enable write to prog. memory
LDI R16,5
CLI
OUT SPMCR,R16
SPM
SEI
POP R30
POP R31


//*****************************************
RET
END DoSpm
Go to the top of the page
 
+Quote Post

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

 


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


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