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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> TI AM1808, разные вопросы
doom13
сообщение Jul 14 2014, 06:42
Сообщение #61


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



А что можно сказать по поводу констант, которе забиты в вектор прерываний, что это может быть?
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jul 14 2014, 07:08
Сообщение #62


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(doom13 @ Jul 14 2014, 09:42) *
А что можно сказать по поводу констант, которе забиты в вектор прерываний, что это может быть?


код сомманды jmp
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 14 2014, 08:50
Сообщение #63


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Если можно поясните здесь подробнее. Что-то не могу понять, что прописано в приведённом выше векторе прерываний. Счас читаю доки, но пока не нахожу ничего по данной теме. Entry - понятно, адрес заданной точки входа, UndefInstHandler, SWIHandler, AbortHandler, IRQHandler, FIQHandler - адреса соответствующих обработчиков. Константы выше Entry - 4 одинаковые 0xE59FF018, ещё 0xE59FF014, 0xE24FF008 и две одинаковые 0xE59FF010 - это всё JUMP? Это ведь должна быть таблица адресов по которым происходит переход при том или ином событии, каким боком здесь JUMP?

Описание вектора прерываний из даташита на рисунке, всё практически как в описанной выше таблице за исключением "констант".


Попробовал удалять или менять на нули эти константы, процессор запускается и работает, но при срабатывании прерывания вылетает.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 14 2014, 09:11
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(doom13 @ Jul 14 2014, 14:50) *
Если можно поясните здесь подробнее. Что-то не могу понять, что прописано в приведённом выше векторе прерываний. Счас читаю доки, но пока не нахожу ничего по данной теме. Entry - понятно, адрес заданной точки входа, UndefInstHandler, SWIHandler, AbortHandler, IRQHandler, FIQHandler - адреса соответствующих обработчиков. Константы выше Entry - 4 одинаковые 0xE59FF018, ещё 0xE59FF014, 0xE24FF008 и две одинаковые 0xE59FF010 - это всё JUMP? Это ведь должна быть таблица адресов по которым происходит переход при том или ином событии, каким боком здесь JUMP?

Что такое дизассемблер знаете?
Даже без него могу предположить, что первые 8 строк - команды типа:
LDR PC,[PC,#N]
а следующие 8 строк - это собственно таблица адресов, которая считывается первыми 8-ю командами.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jul 14 2014, 10:12
Сообщение #65


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(jcxz @ Jul 14 2014, 12:11) *
Даже без него могу предположить, что первые 8 строк - команды типа:
LDR PC,[PC,#N]
а следующие 8 строк - это собственно таблица адресов, которая считывается первыми 8-ю командами.

Совершенно верно, кроме шестого вектора, который Reserved.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jul 14 2014, 11:10
Сообщение #66


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(jcxz @ Jul 14 2014, 12:11) *

Цитата(DmitryM @ Jul 14 2014, 13:12) *

Спасибо, так и есть, если дизассм сделать, то получаем следующее:
Код
address   |
---------------------------------------------------------
80010000: | E59FF018     LDR           PC, 0x80010020
80010004: | E59FF018     LDR           PC, 0x80010024
80010008: | E59FF018     LDR           PC, 0x80010028
8001000c: | E59FF018     LDR           PC, 0x8001002C
80010010: | E59FF014     LDR           PC, 0x8001002C
80010014: | E24FF008     SUB           PC, PC, #0x8
80010018: | E59FF010     LDR           PC, 0x80010030
8001001c: | E59FF010     LDR           PC, 0x80010034
80010020: | XXXXXXX1    Entry_Adddress
80010024: | XXXXXXX2    UndefInstHandler_Adddress
80010028: | XXXXXXX3    SWIHandler_Adddress
8001002c: | XXXXXXX4    AbortHandler_Adddress
80010030: | XXXXXXX5    IRQHandler_Adddress
80010034: | XXXXXXX6    FIQHandler_Adddress

, что соответствует таблице векторов прерываний из даташита. Неверно посчитал - это должна быть таблица переходов на адреса обработчиков, а не просто их адресов.
Ещё не совсем понятна необходимость её переноса в ARM RAM? Получится ли сделать кусок кода на ассме, который отвечает за эти переходы, разместить его в секцию vectors, а её через CMD-файл прикрутить к ARM RAM?
Или поскольку к ARM RAM имеет доступ только сам ARM, то с эмулятором такой вариант точно не прокатит, а если это будет загрузчик, то подход тоже неверный, т.е. при старте программы всегда необходимо перебросить твблицу векторов прерываний в ARM RAM?
Go to the top of the page
 
+Quote Post
doom13
сообщение Aug 12 2014, 14:00
Сообщение #67


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
Начинаю разбираться с работой MMC/SD контроллера и, забегая вперёд, хотел спросить:
1) MMC/SD контроллер после его конфигурации сам произведет инициализаию памяти и переведёт её в нужный режим работы?
2) Если контроллер поддерживает версию спецификации памяти, то мне опускаться до уровня команд MMC/SD не придётся, необходимо будет только писать/читать данные в/из его фифо?
Go to the top of the page
 
+Quote Post
doom13
сообщение Aug 19 2014, 20:42
Сообщение #68


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Немного разобрался с работой MMC/SD контроллера, прошёл этап инициализации памяти. Надо браться за чтение/запись данных и тут не могу понять, каким образом настроить работу шины данных на x8.
Есть у контроллера регистр MMCCTL (рисунок 1), в котором есть биты отвечающие за ширину шины данных, но бит WIDTH1 (рисунок 2) используется, как Read Only. Как же тогда задать режим работы шины данных?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Nov 11 2014, 09:18
Сообщение #69


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую! Помогите разобраться, куда копать. Проблема следующая.
Есть программа, заливаю её в процессор всё работает. В CCS v5.5 останавливаю процессор нажимаю "Suspend", далее нажимаю "CPU Reset", "Restart", "Resume", всё заново запускается и работает.
Добавляю кусок кода, который настраивает и использует прерывария от McBSP и тогда всё работает только один раз после включения питания либо Hard Reset-a.

В начале программы использую настройку прерываний, все функции из AM1808_StarterWare:
Код
IntAINTCInit();
//Enable IRQ for ARM (in CPSR)*/
IntMasterIRQEnable();
// Enable AINTC interrupts in GER */
IntGlobalEnable();
// Enable IRQ in AINTC */
IntIRQEnable();

при инициализации McBSP выполняется следующий кусок кода:
Код
IntRegister((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT), isr);
IntChannelSet((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT), (device_num ? AINTC_CHANNEL_5_MCBSP1RX : AINTC_CHANNEL_4_MCBSP0RX));
IntSystemEnable((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT));


Если поставить точку останова на IntIRQEnable(), дойдёт до неё, далее при нажатии на "Resume" опять попадает на эту же строку (каким-то образом само перезапустилось). Если убираем из программы настройку прерываний McBSP, всё будет работать нормально.

UPP:

Хочу уточнить. Ещё раз всё посмотрел, получается, программа сбрасывается на самое начало. Ещё нашёл, что в CCS можно выбирать кнопку сброса "CPU Reset (SW)", "CPU Reset (HW)" и "System Reset". Так вот, если для программы с "глючным куском кода" делать "CPU Reset", то перезапустить её не получится, выполнение доходит до определённого места, а потом каким-то образом происходит сброс на начало. Если выполнить "System Reset" и "Restart", то программа запустится нормально. Для программы без использования прерывания от McBSP можно использовать любой вариант сброса. В чём отличие? И как сделать правильно, чтоб запускалось в любом случае?
Go to the top of the page
 
+Quote Post
akos
сообщение Mar 27 2015, 05:40
Сообщение #70





Группа: Новичок
Сообщений: 2
Регистрация: 26-03-15
Пользователь №: 85 892



Помогите найти пример для работы с SD картой на AM1808
Go to the top of the page
 
+Quote Post

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

 


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


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