Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: asm исходники для отладочной платы str912-sk
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
s868
Доброго времени суток и с наступающими праздниками.
Прошу по возможности оказать содействие в следующей проблеме. Приобретена отладочная плата str912-sk (на основе процессора STR912FA W44X6), софт IAR Embedded Workbench 4.0. после включения все вроде работает, удается запускать исходники, идущие в комплекте к софту и проделывающие на плате разные трюки - от простого вывода на порт светодиодов до примеров работы с остальной периферией.
но вся беда в том что они написаны на СИ, а на ассемблере нету ни одного. Если кто имел дело с такой платой - прошу поделиться кусками написанных прогамм, а то ведь вообще ппц - начинать не с чего, негде взять образец ЛЮБОЙ работающей программы на ассм, чтобы увидеть как там заголовок идет и чем кончается))).
Интересует простейшая программа - выдача в бесконечном цикле инкремента байта в порт GPIO3 (там светодиоды).
Спасибо за внимание.
Dron_Gus
АСМ, по ряду причин, не пользуется особой популярностью среди программистов АРМов. На нем пишут начальную инициализацию (startup.s в идеологии IAR) и особо критичные секции.

З.Ы. на сайте ST в разделе Application Notes точно есть 1 пример на АСМ - это оптимизированная memcpy.
zltigo
Цитата(s868 @ Dec 28 2007, 12:21) *
..но вся беда в том что они написаны на СИ, а на ассемблере нету ни одного.

Можете начинать писать на 'C'. Пора. Заниматься писанием на ASM чего-либо функционально законченного для такого уровня контроллеров, очень мягко говоря, неразумно. Кусочек о пару десятков-сот команд оптимизированный ручками это нормально, но это потом.
s868
спасибо за ответы) значит будем потихоньку переходить на С
возник еще вопрос: на 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 которого содержат маску.
это и проделано в программе. что не так?
Сергей Борщ
Цитата(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, в нем описаны имена всех регистров.
s868
Сэр Сергей Борщ, благодарю за советы. К сожелению написаный фрагмент тоже не работает нужным образом( судя по всему алгоритм инициализации порта неправильный((
вроде все делается согласно даташиту, но порт на вывод не удается настроить
Dron_Gus
Порт для начала надо включить.
s868
как?) какой регистр за это отвечает?
Dron_Gus
Смотрите Peripheral clock gating register 1 (SCU_PCGR1).
Сергей Борщ
Цитата(s868 @ Jan 14 2008, 14:28) *
К сожелению написаный фрагмент тоже не работает нужным образом( судя по всему алгоритм инициализации порта неправильный((
У меня нет STR912 живьем, я с ним не работаю, даташит не читал и пример писал с ваших слов, просто для иллюстрации. Увы - чем могу... Тут появляется AlexandrY, он работает с STR9хх. Почитайте описания с его сайта, но лучше еще раз внимательно проштудировать документацию.
s868
спасибо, ребята.
s868
действительно не хватало включить перифирию, процесс затянулся всвязи с опечаткой в даташите производителя - неверно указан адрес
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
==================
всем спасибо, и удачных проектов!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.