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

 
 
> Помогите начать работать с Assembler, Assembler для LPC2148
Max-sceince
сообщение Mar 21 2009, 15:18
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 1-01-09
Пользователь №: 42 870



Ребята, помогите пожалуйста начать работать с ассемблером. У меня МК LPC2148 c ядром ARM 7. В чем заключается проблема: Не могу добится от МК высокой производительности если пишу код программы на С, поэтому решил написать код на assembler. Использую программу keil. Посоветовали скачать arm7tdmidatasheet.pdf. Скачал почитал. Примеры есть, но как и с чего начать писать, как связать и подключить нужные модули и т.д. Вообщем просто необходи какой-нибудь простой примерчик (например поморгать светодиодами только чтобы код программы был написан на assemble) или дайте ссылочку на какой нибудь проект где люди пишут на ассемблере. Буду вам весьма признателен!!! :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Max-sceince
сообщение Mar 21 2009, 15:49
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 1-01-09
Пользователь №: 42 870



aaarrr, оптимизировать то нечего все очень просто. МК использую для управления двигателем. Перед тем как написать полностью проект отлаживаю его составные части. Вот дошел до датчика скорости. На один оборот датчика скорости приходит 250 импульсов.
Написал программу
CODE
#include <lpc214x.h>
int i;
void T1isr(void) __irq;
void _PLL (void);
void _MAM (void);
int main(void)
{
int j;
i=0;
_PLL();
_MAM();
PINSEL1 =0x00000C00; //p0.21 vibran kak zahvat//
T1PR = 0x00000001; //Load prescaler for 1 Msec tick
T1TCR = 0x00000002; //Reset counter and prescaler
T1CCR = 0x00000A00; //Capture on rising edge of channe0.0
T1TCR = 0x00000001; //enable timer
VICVectAddr5 = (unsigned)T1isr; //Set the timer ISR vector address
VICVectCntl5 = 0x00000025; //Set channel
VICIntEnable = 0x00000020; //Enable the interrupt
IODIR0 =0x00000C00; //set p.10 and p.11 outputs
IO0SET =0x0C00;
j=0;
while(1)
{
if (i==250)
{
IO0CLR = 0x0400;
}
VICIntEnable = 0x00000020; //Enable the interrupt
for (j = 0; j < 500000; j++ ); // wait 500 msec
IO0CLR =0x0800;
for (j = 0; j < 500000; j++ ); // wait 500 msec
IO0SET =0x0800;
}

}

void _PLL (void)
{
PLL0CFG = 0x00000024; // ystanavliv koef ymnojenia i delenia for poluchenia chastoti 60MHz
PLL0CON = 0x00000001; // vkluchaem PLL
PLL0FEED = 0x000000AA; // obnovliaem registri
PLL0FEED = 0x00000055;
while (!(PLL0STAT& 0x00000400));// proveraiem flag lock
PLL0CON = 0x00000003; // podkluchaem PLL
PLL0FEED = 0x000000AA; // obnovliaem registri Pll
PLL0FEED = 0x00000055;
VPBDIV = 0x00000002; // Yctanablivaem chastotu chini VPB=30MHz
}
void _MAM (void)
{
MAMCR = 0x00000000;
MAMTIM = 0x00000004;
MAMCR = 0x00000002;
}
void T1isr (void) __irq
{
VICIntEnClr = 0x00000020;
i++;
T1IR = 0x00000080;
VICVectAddr = 0x00000024; //Dummy write to signal end of interrupt

}

Импульсы от датчика скорости подаю на ногу МК (p0.21) программирую её как capture 1.3 ()для TIMER1. Настраиваю TIMER1 таким образом чтобы при переходе c 0 на 1, МК входила в прерывание. В приревании инкременирую i(счетчик импульсов). в основном теле программы провиряю этот счетчик если он равен 250 то я включаю светодиод. На отладочной плате их у меня два. Один светодиод просто мигает, а второй показывает когда счетчик импульсов i насчитал 250 импульсов. Всё просто!!!!!
Заливаю программу в МК. Датчик делает кучу оборотов, только после этого загорается светодиод. Т.е. обработка тормозит. Импульсы МК пропускает! Думаю что программа написанная на С, тормозит МК. Какие пути оптимизации? Пожалуйста предложите, буду очень рад услышать конструктивную критику и не только!!! smile.gif
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Max-sceince   Помогите начать работать с Assembler   Mar 21 2009, 15:18
- - aaarrr   Боюсь, что Вы не стой стороны пытаетесь решить про...   Mar 21 2009, 15:30
|- - aaarrr   Цитата(Max-sceince @ Mar 21 2009, 18...   Mar 21 2009, 16:02
|- - Andy Mozzhevilov   Цитата(Max-sceince @ Mar 21 2009, 20...   Mar 21 2009, 17:06
- - Max-sceince   Запрещаю прерывание в превании для того чтобы если...   Mar 21 2009, 16:13
|- - aaarrr   Цитата(Max-sceince @ Mar 21 2009, 19...   Mar 21 2009, 16:40
- - Max-sceince   Andy Mozzhevilov, На 1 оборот диска приходится 250...   Mar 21 2009, 17:31
|- - zltigo   Цитата(Max-sceince @ Mar 21 2009, 20...   Mar 21 2009, 17:56
- - Andy Mozzhevilov   В общем за 80 мкс на импульс можно его на 60 МГц н...   Mar 21 2009, 18:06
- - Max-sceince   zltigo, так вот именно что, вроде ничего не нагоро...   Mar 21 2009, 18:08
|- - zltigo   Цитата(Max-sceince @ Mar 21 2009, 21...   Mar 21 2009, 18:14
|- - SysRq   Цитата(Max-sceince @ Mar 21 2009, 21...   Mar 21 2009, 18:19
- - Max-sceince   zltigo, а вы можете подсказать где неверно, либо д...   Mar 21 2009, 18:35
- - Max-sceince   Спасибо, SysRq понял свою ошибку!!! За...   Mar 22 2009, 04:19


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

 


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


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