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

 
 
> Bопрос по АРМ9, Обработчики прерываний
axa09
сообщение Feb 22 2009, 00:03
Сообщение #1


Участник
*

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



контроллер at91rm9200. частота ядра 180мгц, шина 60мгц. на шине статическая память с 16-битной шиной, с NWS=0(без дополнительных тактов). кеши оба включены-память закеширована write-back, в ней исполняется программа.
обработчики прерываний в этой памяти.

вопрос-
если обработчики разместить во внутренней sram контроллера,будет ли выигрыш в производительности?
или с кешами это не принципиально?
как обработчик прерывания в keil скопировать из одной памяти в другую с учётом коррекции счётчика адреса(РС?)

И ещё-пробовал стек делать во внутренней памяти - на глаз быстродействие не изменилось sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
axa09
сообщение Feb 26 2009, 01:35
Сообщение #2


Участник
*

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



Спасибо за ответы! smile.gif

В той же программе оптимизирую другой кусок кода.

Есть функция, которая заполняет буфер 32 байта. Этот буфер требуется переслать по SPI периферийному устройству, которое имеет внутренний аппаратный буфер.
Периферийное устройство шлет внешнее прерывание контроллеру когда нужна порция данных в аппаратный буфер.

Сейчас сделано так:
в обработчике прерывания циклом засылаю в SPI Data register по-очереди все 32 байта. После передачи каждого байта тупо жду. На последнем 31-м шаге цикла перед опросом состояния вызываю функцию постройки нового буфера 32 байт, в надежде потратить время на постройку буфера.

Но к сожалению времени иногда не хватает, а на первых 31 шагах цикла время теряется на тупой опрос состояния занятости SPI.

Ядро 200мгц, SPI клок 8мгц (ограничение периферийного устройства).
Вот я и прикинул : 200/(8/8/32) = 6400 тактов теряем впустую - а ведь можно было это время потратить целиком на построение буфера.

Значит надо использовать DMA.

Псевдокод обработчика прерывания:

__irq void SebdData(void)
{
static u32 i=0;
DMA_Send(Buffer[i],32); //посылаем в DMA первый буфер Buffer[0] - 32 байта
CreatePacket(Buffer[i^1]); //строим второй Buffer[1] - 32 байта
i^=1; //переворачиваем для того чтоб обменять первый и второй буферы местами для следующего раза
AIC_EOI=0; // конец перывания
}

в силу специфики системы использую SPI с указанием NPCS в регистре SPI_TDR (регистр передачи)
тоесть :

SPI_TDR=(номер NPCS<< на сколько-то бит)|Data;

вопрос, как организовать пересылку по DMA?
кеши у меня включены оба.

где-то читал, что с SPI+DMA заморочки по поводу буферов - нужно тратить все 32 бита для того чтоб отправить в SPI.

помогите пожалуйста с DMA в моем случае!

что должно быть в буфере, который должен съесть DMA? (формат). Для моего случая

буфер приёма тоже должен быть? и при DMA-передаче должен быть ещё прием, так?

если можно, то напишите Си-кодом плиз.

Сообщение отредактировал axa09 - Feb 26 2009, 01:36
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- axa09   Bопрос по АРМ9   Feb 22 2009, 00:03
- - aaarrr   Цитата(axa09 @ Feb 22 2009, 03:03) вопрос...   Feb 22 2009, 14:14
- - sergeeff   Цитата(axa09 @ Feb 22 2009, 03:03) контро...   Feb 22 2009, 15:46
- - axa09   За ответы спасибо! с праздником! можно по...   Feb 22 2009, 22:48
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 01:48) можно ...   Feb 22 2009, 23:09
|- - sergeeff   Цитата(axa09 @ Feb 23 2009, 01:48) За отв...   Feb 23 2009, 00:15
|- - AndrewN   Цитата(axa09 @ Feb 23 2009, 02:48) таблиц...   Feb 23 2009, 06:16
|- - sergeeff   Цитата(AndrewN @ Feb 23 2009, 09:16) Подс...   Feb 23 2009, 10:58
- - axa09   Надо хотябы на 25% повысить. почему напрасно? как ...   Feb 22 2009, 23:26
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 02:26) Надо х...   Feb 22 2009, 23:32
- - axa09   Нужно ускорить переброс видеобуфера в дисплейную п...   Feb 23 2009, 00:19
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 03:19) Нужно ...   Feb 23 2009, 00:34
- - axa09   Пришла в голову мысль расположить таблицу во внутр...   Feb 23 2009, 01:28
- - axa09   В общем удалось ради эксперимента таблицу запихать...   Feb 23 2009, 07:45
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 10:45) прирос...   Feb 23 2009, 12:22
|- - sergeeff   Цитата(axa09 @ Feb 23 2009, 10:45) В обще...   Feb 23 2009, 13:02
|- - axa09   Цитата(sergeeff @ Feb 23 2009, 04:02) Даж...   Feb 23 2009, 13:32
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 16:32) Как мо...   Feb 23 2009, 14:28
- - axa09   У меня память 16 бит шина данных. всёравно по 32 б...   Feb 23 2009, 14:47
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 17:47) У меня...   Feb 23 2009, 15:03
- - sergeeff   Цитата0x00200400 - первый мегабайт SRAM (NCS0) Зн...   Feb 23 2009, 14:56
- - axa09   Вариант идёт с 45 преобразований/с. но это не чист...   Feb 23 2009, 15:14
|- - aaarrr   Цитата(axa09 @ Feb 23 2009, 18:14) Вариан...   Feb 23 2009, 15:41
|- - axa09   Цитата(aaarrr @ Feb 23 2009, 07:41) Т.е. ...   Feb 24 2009, 10:45
- - sergeeff   Совет. Длительность CS для вывода на дисплей соотв...   Feb 23 2009, 16:14
- - axa09   Спасибо! как проверю-напишу результаты и приве...   Feb 23 2009, 21:30
- - aaarrr   RE: Bопрос по АРМ9   Feb 24 2009, 14:32
- - axa09   тоесть в моём случае уже ничего не придумать?   Feb 24 2009, 15:33
- - aaarrr   Ну, можно Write Buffer включить - сразу прибавится...   Feb 24 2009, 15:50
- - axa09   Он включен(бит buferable-1) или в другом месте еще...   Feb 24 2009, 19:50
- - aaarrr   Вы же писали: Цитата0x00200С00 - периферия(дисплей...   Feb 24 2009, 20:01
- - axa09   А разве можно буферизовать дисплей(его регистры)? ...   Feb 24 2009, 21:23
|- - aaarrr   Цитата(axa09 @ Feb 25 2009, 00:23) ведь к...   Feb 24 2009, 21:25
- - axa09   Разобрался! Мусор возникал из-за неверной врем...   Feb 25 2009, 03:41
|- - aaarrr   Цитата(axa09 @ Feb 25 2009, 06:41) для ди...   Feb 25 2009, 11:30
- - axa09   тоесть оставить только buferable для регистров вне...   Feb 25 2009, 12:48
|- - aaarrr   Цитата(axa09 @ Feb 25 2009, 15:48) тоесть...   Feb 25 2009, 12:51
- - axa09   Спасибо за ответы! в целом меня устраивает пр...   Feb 25 2009, 13:20
|- - aaarrr   Цитата(axa09 @ Feb 25 2009, 16:20) просну...   Feb 25 2009, 14:01
- - Rst7   Цитатапроснулся чисто спортивно-исследовательский ...   Feb 25 2009, 14:08
- - axa09   если нетрудно,напишите пожалуйста фрагмент кода на...   Feb 25 2009, 23:48
|- - aaarrr   Цитата(axa09 @ Feb 26 2009, 02:48) читаем...   Feb 26 2009, 00:09
- - axa09   если текущий режим spi не подходит, можно сменить ...   Feb 26 2009, 02:48
|- - aaarrr   Цитата(axa09 @ Feb 26 2009, 05:48) Получи...   Feb 26 2009, 03:23
- - axa09   удалось запустить ДМА. Фокус с ремэпом прокатл-к т...   Feb 26 2009, 10:48
|- - aaarrr   Цитата(axa09 @ Feb 26 2009, 13:48) кстати...   Feb 26 2009, 12:04
- - axa09   как и когда очищать буферизованый буфер для ДМА? ...   Feb 26 2009, 12:40
|- - aaarrr   Цитата(axa09 @ Feb 26 2009, 15:40) как и ...   Feb 26 2009, 12:50
- - axa09   Не совсем понял. команду очистки давать до старта ...   Feb 26 2009, 15:10
|- - aaarrr   Цитата(axa09 @ Feb 26 2009, 18:10) Не сов...   Feb 26 2009, 15:15
- - axa09   Подскажите пожалуйста где здесь функция очистки бу...   Feb 26 2009, 23:09
|- - aaarrr   Цитата(axa09 @ Feb 27 2009, 02:09) Подска...   Feb 26 2009, 23:19
- - axa09   тоесть Rd должен быть равен нулю: mov r0, 0 mcr p...   Feb 27 2009, 00:07
- - axa09   в чём хорош режим сквозной записи кэша по сравнени...   Feb 27 2009, 04:58


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:09
Рейтинг@Mail.ru


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