|
Скорость ног SAM7, проблема с выводом |
|
|
|
May 4 2008, 12:23
|
Участник

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

|
Добрый день! На AT91S64 начал программно (т.е. сам через порт, а не через стандартные функции периферии) выводить информацию на ноги частотой ~10-15 МегаГерц но, по осциллографу, выходит не более 1. Подскаже, я чего-то не понимаю или это ошибка, связанная с мои неправильными действиями?
|
|
|
|
|
 |
Ответов
|
May 5 2008, 08:00
|
Участник

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

|
Ниже привожу код (IAR). Прошу прощения, что не сделал сразу. Код #include <inarm.h> #include "main.h"
void AT91F_LowLevelInit(void) @ "ICODE" {//low_level_init
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_0FWS;
AT91C_BASE_PMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x40 <<8) | AT91C_CKGR_MOSCEN )); // Wait Main Oscillator stabilization while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1 | (16 << 8) | (AT91C_CKGR_MUL & (405 << 16)) | //18.432*(405+1)/250=29.933 (AT91C_CKGR_DIV & 250); // Wait for PLL stabilization while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK) ); while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK; // Wait until the master clock is established while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK; // Wait until the master clock is established while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; }
int main() {
AT91F_LowLevelInit(); //инициализируем рабочую частоту
//разрешаем периферические часы AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,(1 << AT91C_ID_PIOA)/);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,SCREEN_DB|SCREEN_D_C|SCREEN_RES|SCREEN_WR|SCREEN_RD);
AT91F_PIO_CfgDirectDrive(AT91C_BASE_PIOA,SCREEN_DB);
while (1) { AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,SCREEN_WR); AT91F_PIO_ForceOutput(AT91C_BASE_PIOA,0x5555<<16); AT91F_PIO_SetOutput(AT91C_BASE_PIOA,SCREEN_WR); } } Стандартная отладочная плата SAM7S64 При частоте - 30 MHz (от PLL, кварц - 18.432) в режиме Thumb, период главного цикла (по осциллографу) - 2 мкс, 0 на SCREEN_WR примерно 0.5мкс, 1 - 1мкс в режиме ARM, период главного цикла (по осциллографу) - 2 мкс, 0 на SCREEN_WR 0.75мкс, 1 - 1.25мкс Скложилось впечатление, что само обращение к порту происходит крайне медленно (ИАР обрезанный, ассемблер посмотреть не могу  ) Предполагал, что АРМ должен обеспечивать большую скорость - ведь даже на меге результаты лучше! Или я что-то делаю не так?
Сообщение отредактировал Iezuit - May 5 2008, 08:11
|
|
|
|
|
May 5 2008, 09:56
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Iezuit @ May 5 2008, 11:00)  Код while (1) { AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,SCREEN_WR); AT91F_PIO_ForceOutput(AT91C_BASE_PIOA,0x5555<<16); AT91F_PIO_SetOutput(AT91C_BASE_PIOA,SCREEN_WR); } } Ну если чуть поразмыслить, то получается что-то вроде Код ldr r0, =AT91C_BASE_PIOA label: ldr r1, SCREEN_WR str r1, [r0 + КАК_ЕГО_ТАМ_PIOA_CLR] mov r1, #0x5555 lsl 16; Не уверен, что это можно mov str r1, [r0 + КАК_ЕГО_ТАМ_PIOA_SET] bic r1, r1, 0xFFFFFFFF; ?????? str r1, [r0 + КАК_ЕГО_ТАМ_PIOA_CLR] ldr r1, SCREEN_WR str r1, [r0 + КАК_ЕГО_ТАМ_PIOA_SET] b label Посчитайте такты.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
May 5 2008, 10:59
|
Участник

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

|
Цитата(amw @ May 5 2008, 13:56)  Посчитайте такты. Спасибо! Скачал описание ассемблера с атмела и посчитал. Результат меня расстроил. А есть ли какие-то альтернативные способы? Задача стоит так: обеспечить общение АРМ с OLED экраном по паралленому интерфейсу (8битная шина). На Меге приемлемая скорость получалось за счет использования механизма работы с внешней памятью (т.е. чтение и запись аппаратно устанавливались). А в АРМе есть какие-нибудь возможности несколько быстрее общаться с шиной?
|
|
|
|
Сообщений в этой теме
Iezuit Скорость ног SAM7 May 4 2008, 12:23 bureau Приведите листинг своего кода, если вас не затрудн... May 4 2008, 12:45 aaarrr Цитата(Iezuit @ May 4 2008, 16:23) На AT9... May 4 2008, 14:49 aaarrr А оптимизация-то включена? May 5 2008, 09:04 Iezuit Цитата(aaarrr @ May 5 2008, 13:04) А опти... May 5 2008, 09:25  bureau 2 Iezuit
Неправильно понимаешь. Ты сравни с и без,... May 5 2008, 09:36   Iezuit Цитата(bureau @ May 5 2008, 13:36) 2 Iezu... May 5 2008, 09:44    KAlex Цитата(Iezuit @ May 5 2008, 12:44) У меня... May 5 2008, 11:10     Iezuit Цитата(KAlex @ May 5 2008, 15:10) Это как... May 5 2008, 11:14      KAlex Здесь все давно разжевано. May 5 2008, 11:20 vet простое дергание ноги должно выливаться в гораздо ... May 5 2008, 11:21 aaarrr Ну, amw написал уж очень страшный вариант. На деле... May 5 2008, 11:31 amw Цитата(aaarrr @ May 5 2008, 14:31) Ну, am... May 5 2008, 11:59 Iezuit Простое - да, но у меня между дерганьями было еще
... May 5 2008, 11:37 aaarrr Цитата(Iezuit @ May 5 2008, 15:33) Просто... May 5 2008, 11:39  Iezuit Цитата(aaarrr @ May 5 2008, 15:39) Для на... May 5 2008, 11:46 aaarrr Цитата(Iezuit @ May 5 2008, 15:46) Ну я в... May 5 2008, 12:04 Iezuit Большое спасибо!
Пробую... May 5 2008, 12:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|