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

 
 
> asm исходники для отладочной платы str912-sk, где взять?
s868
сообщение Dec 28 2007, 10:21
Сообщение #1





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



Доброго времени суток и с наступающими праздниками.
Прошу по возможности оказать содействие в следующей проблеме. Приобретена отладочная плата str912-sk (на основе процессора STR912FA W44X6), софт IAR Embedded Workbench 4.0. после включения все вроде работает, удается запускать исходники, идущие в комплекте к софту и проделывающие на плате разные трюки - от простого вывода на порт светодиодов до примеров работы с остальной периферией.
но вся беда в том что они написаны на СИ, а на ассемблере нету ни одного. Если кто имел дело с такой платой - прошу поделиться кусками написанных прогамм, а то ведь вообще ппц - начинать не с чего, негде взять образец ЛЮБОЙ работающей программы на ассм, чтобы увидеть как там заголовок идет и чем кончается))).
Интересует простейшая программа - выдача в бесконечном цикле инкремента байта в порт GPIO3 (там светодиоды).
Спасибо за внимание.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
Dron_Gus
сообщение Dec 28 2007, 11:20
Сообщение #2


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



АСМ, по ряду причин, не пользуется особой популярностью среди программистов АРМов. На нем пишут начальную инициализацию (startup.s в идеологии IAR) и особо критичные секции.

З.Ы. на сайте ST в разделе Application Notes точно есть 1 пример на АСМ - это оптимизированная memcpy.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 28 2007, 16:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(s868 @ Dec 28 2007, 12:21) *
..но вся беда в том что они написаны на СИ, а на ассемблере нету ни одного.

Можете начинать писать на 'C'. Пора. Заниматься писанием на ASM чего-либо функционально законченного для такого уровня контроллеров, очень мягко говоря, неразумно. Кусочек о пару десятков-сот команд оптимизированный ручками это нормально, но это потом.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
s868
сообщение Jan 14 2008, 08:23
Сообщение #4





Группа: Участник
Сообщений: 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 которого содержат маску.
это и проделано в программе. что не так?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 14 2008, 11:31
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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ть исходного текста biggrin.gif
Если будете продолжать на ассемблере - включите в начале исходника заголовочный файл iostr912.h, в нем описаны имена всех регистров.


--------------------
На любой вопрос даю любой ответ
"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
s868
сообщение Jan 14 2008, 12:28
Сообщение #6





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



Сэр Сергей Борщ, благодарю за советы. К сожелению написаный фрагмент тоже не работает нужным образом( судя по всему алгоритм инициализации порта неправильный((
вроде все делается согласно даташиту, но порт на вывод не удается настроить
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jan 14 2008, 13:36
Сообщение #7


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Порт для начала надо включить.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
s868
сообщение Jan 14 2008, 13:40
Сообщение #8





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



как?) какой регистр за это отвечает?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jan 14 2008, 13:43
Сообщение #9


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Смотрите Peripheral clock gating register 1 (SCU_PCGR1).


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 14 2008, 13:44
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
s868
сообщение Jan 14 2008, 14:20
Сообщение #11





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



спасибо, ребята.
Go to the top of the page
 
+Quote Post
s868
сообщение Jan 15 2008, 15:24
Сообщение #12





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

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

 


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


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