|
asm исходники для отладочной платы str912-sk, где взять? |
|
|
|
Dec 28 2007, 10:21
|
Группа: Участник
Сообщений: 14
Регистрация: 28-12-07
Пользователь №: 33 700

|
Доброго времени суток и с наступающими праздниками. Прошу по возможности оказать содействие в следующей проблеме. Приобретена отладочная плата str912-sk (на основе процессора STR912FA W44X6), софт IAR Embedded Workbench 4.0. после включения все вроде работает, удается запускать исходники, идущие в комплекте к софту и проделывающие на плате разные трюки - от простого вывода на порт светодиодов до примеров работы с остальной периферией. но вся беда в том что они написаны на СИ, а на ассемблере нету ни одного. Если кто имел дело с такой платой - прошу поделиться кусками написанных прогамм, а то ведь вообще ппц - начинать не с чего, негде взять образец ЛЮБОЙ работающей программы на ассм, чтобы увидеть как там заголовок идет и чем кончается))). Интересует простейшая программа - выдача в бесконечном цикле инкремента байта в порт GPIO3 (там светодиоды). Спасибо за внимание.
|
|
|
|
|
 |
Ответов
(1 - 11)
|
Jan 14 2008, 08:23
|
Группа: Участник
Сообщений: 14
Регистрация: 28-12-07
Пользователь №: 33 700

|
спасибо за ответы) значит будем потихоньку переходить на С возник еще вопрос: на STR912 пытаюсь настроить GPIO3 на вывод и прописать в него константу, для этого был создан следующий шэдэвр
NAME main PUBLIC main COMMON INTVEC:CODE CODE32 B main RSEG ICODE:CODE mdd1 dc32 0x4c002050 //(адрес регистра SCU_GPIOOUT3) mdd2 dc32 0x48009400 //(адрес регистра GPIO_DIR) mdd3 dc32 0x480093fc //(адрес GPIO_DATA, в котором задана маска 11111111)
CODE32 main nop nop nop nop
//GPIO data direction register ( 1: Output) ldr r0,mdd2 mov r1,#0xff strb r1,[r0] nop
//GPIO output register (SCU_GPIOOUTn) set 01: Alternate Output 1 (general purpose output) ldr r0,mdd1 mov r1, #0x55 strb r1,[r0] strb r1,[r0,#1]
//GPIO data register (GPIO_DATA)
ldr r0,mdd3 mov r1, #0x0f strb r1,[r0]
main1 B main1 END main
в общем он не работает((( по даташиту описана процедура настройки порта на вывод: нужно настроить порт на вывод, определить Alternate Function 1 (output from GPIO_DATA register) и собственно послать выводимый байт по адресу, биты 9:2 которого содержат маску. это и проделано в программе. что не так?
|
|
|
|
|
Jan 14 2008, 11:31
|

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

|
Цитата(s868 @ Jan 14 2008, 10:23)  что не так? В используемом вами пакете есть симулятор (иконка с зеленой лупой). Вы можете самостоятельно пройти ваш код по шагам и в соответствующих окнах (View->Register) увидеть - в какие регистры что записывает ваша программа. Дальше медитировать над исходным текстом, если пишется не то или не туда. По вашему словесному описанию: Код #include <iostr912.h> int main() { SCU_GPIOOUT3 = 0x5555; // I/O GPIO3_DIR = 0xFF; // output GPIO3_DATA = 0x0F; // write constant for(;;) ; } Сравнивайте сложноcть исходного текста Если будете продолжать на ассемблере - включите в начале исходника заголовочный файл iostr912.h, в нем описаны имена всех регистров.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 14 2008, 12:28
|
Группа: Участник
Сообщений: 14
Регистрация: 28-12-07
Пользователь №: 33 700

|
Сэр Сергей Борщ, благодарю за советы. К сожелению написаный фрагмент тоже не работает нужным образом( судя по всему алгоритм инициализации порта неправильный(( вроде все делается согласно даташиту, но порт на вывод не удается настроить
|
|
|
|
|
Jan 14 2008, 13:40
|
Группа: Участник
Сообщений: 14
Регистрация: 28-12-07
Пользователь №: 33 700

|
как?) какой регистр за это отвечает?
|
|
|
|
|
Jan 14 2008, 13:44
|

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

|
Цитата(s868 @ Jan 14 2008, 14:28)  К сожелению написаный фрагмент тоже не работает нужным образом( судя по всему алгоритм инициализации порта неправильный(( У меня нет STR912 живьем, я с ним не работаю, даташит не читал и пример писал с ваших слов, просто для иллюстрации. Увы - чем могу... Тут появляется AlexandrY, он работает с STR9хх. Почитайте описания с его сайта, но лучше еще раз внимательно проштудировать документацию.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 14 2008, 14:20
|
Группа: Участник
Сообщений: 14
Регистрация: 28-12-07
Пользователь №: 33 700

|
спасибо, ребята.
|
|
|
|
|
Jan 15 2008, 15:24
|
Группа: Участник
Сообщений: 14
Регистрация: 28-12-07
Пользователь №: 33 700

|
действительно не хватало включить перифирию, процесс затянулся всвязи с опечаткой в даташите производителя - неверно указан адрес 14 SCU_PCGR0 Reserved Peripheral Clock Gating Reg. 0 48 SCU_PCGR1 Reserved Peripheral clock Gating Register 1=========18 а не 48 1C SCU_PRR0 Reserved Peripheral Reset Reg. 0
в завершении темы публикую законченый шэдэвр простейшей программы на ассме, которая инициализирует порт на вывод и выводит в него 0х55 в замкнутом цикле. надеюсь кому-то это поможет. ===============================================
NAME main PUBLIC main COMMON INTVEC:CODE CODE32 B main RSEG ICODE:CODE
s_gpout3 dc32 0x4c002050 //SCU_GPIOOUT3 (16 бит) pcgr1 dc32 0x4c002018 //SCU_PCGR1 (32) prr1 dc32 0x4c002020 //SCU_PRR1 (32) mgr1 dc32 0x4c002028 //SCU_MGR1 (32) pecgr1 dc32 0x4c002030 //SCU_PECGR1 (32) s_gpt3 dc32 0x4c002090 //SCU_GPIOTYPE3 (8)
gp03sel dc32 0x48009420 //GPIO_SEL (8) gp03dir dc32 0x48009400 //GPIO_DIR (8) data3 dc32 0x480093fc //GPIO_DATA (8)
CODE32
main nop nop nop nop
//SCU_PCGR1_bit.GPIO3 = 1; ldr r0,pcgr1; mov r1,#0x02; strb r1,[r0,#2]; nop; //SCU_PRR1_bit.RST_GPIO3 = 1; ldr r0,prr1; mov r1, #0x02; strb r1,[r0,#2]; //SCU_MGR1_bit.MSK_GPIO3 = 1; ldr r0,mgr1; mov r1, #0x02; strb r1,[r0,#2]; //SCU_PECGR1_bit.GPIO3 = 1; ldr r0,pecgr1; mov r1,#0x02; strb r1,[r0,#2]; nop; //GPIO3_SEL = 0; ldr r0,gp03sel; mov r1, #0x0; strb r1,[r0]; // GPIO3_DIR = 0xFF; ldr r0,gp03dir; mov r1, #0xff; strb r1,[r0]; // SCU_GPIOTYPE3 = 0; ldr r0,s_gpout3 ; mov r1, #0x0; strb r1,[r0]; // SCU_GPIOOUT3 = 0x5555; ldr r0,s_gpout3; mov r1, #0x55; strb r1,[r0]; strb r1,[r0,#1];
main1 // SCU_GPIOTYPE3 = 0; ldr r0,data3 ; mov r1, #0x55; strb r1,[r0];
B main1; END main ================== всем спасибо, и удачных проектов!
Сообщение отредактировал s868 - Jan 15 2008, 15:25
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|