Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Шаманить с указателями
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Попросил убрать из "Программирования"



есть две области в ARM968E-S
в первой висит 16-битный супресс USB, во второй - NOR Flash

Читается/пишется в первую область только по/из фиксированным адресам
Во вторую - и так, и с инкрементом

оптимизация компилятора в Time и O3

Шины. 1-я с супрессом - 16бит, 2-я - 32 бит

Что-то фигню наблюдаю

Первая область объявлена как
Код
#define        FX2_FIFO2            (*(volatile unsigned int *)(FX2_BASE_ADDR + (0x00UL<<2)))
#define        FX2_FIFO4            (*(volatile unsigned int *)(FX2_BASE_ADDR + (0x02UL<<2)))


вторая - также через volatile, но в своем диапазоне

Доступ к памяти осцилл показывает и, судя по тестам, точно как и надо

А вот данные - не пойми чего
Для пересылки и сокращения доступа к той и другой области памяти попробовал сделать union с тремя полями - U16, U16 и U32
Например, чтение из первой области - в две U16 подряд, потом из U32 - в другую область запись

Шаманство sm.gif Не работает
RabidRabbit
Немного непонятно, если первая область 16 бит, то почему для обращения к ней используется unsigned int? Или там обмен 32-битными словами через 16-битную шину? Сайпресс какой?
toweroff
Цитата(RabidRabbit @ Oct 18 2012, 09:38) *
Немного непонятно, если первая область 16 бит, то почему для обращения к ней используется unsigned int? Или там обмен 32-битными словами через 16-битную шину? Сайпресс какой?

супресс 68013А
точно, указатель на int. Попробую переделать, напишу
toweroff
Переделал. Все равно шняга какая-то отправляется
Да еще кейл глючит, не хочет отлаживаться не то что с J-Link, но и со своим ULINK2 sad.gif
RabidRabbit
Если подключение к сайпрессу асинхронное, попробуйте ногодрыгом почитать...
toweroff
Цитата(RabidRabbit @ Oct 18 2012, 14:46) *
Если подключение к сайпрессу асинхронное, попробуйте ногодрыгом почитать...

Да, асинхронное
А смысл в ногодрыге? Осцилл показывает вполне себе нормальные сигналы, все интервалы с очевидным запасом к минимальным из даташита на супресс (там 70нс, а у меня 110нс)
Lotor
Цитата(toweroff @ Oct 18 2012, 14:25) *
Да еще кейл глючит, не хочет отлаживаться не то что с J-Link, но и со своим ULINK2 sad.gif

Оптимизацию не забыли убрать в ноль? А вообще я давно printf обхожусь.
toweroff
Цитата(Lotor @ Oct 18 2012, 14:58) *
Оптимизацию не забыли убрать в ноль? А вообще я давно printf обхожусь.

и в 0, и в 3 - никакой разницы
а по поводу printf - на плате нет других каналов связи с внешним миром, к сожалению. Только вот супресс, который не работает sad.gif

Вот что обнаружил. Запись в супресс происходит 2 раза. Непонятно почему, но SEMC выдает /CS, а потом два сигнала записи, потом убирает /CS
Так вот длительности /WR нормальные, как я их и установил, но вот интервал между ними - 32нс, что для супресса маловато. Сейчас попробую поиграть с этим
RabidRabbit
Может включен "the AHB write buffer"? В любом случае, задержка между двумя записями должна помочь sm.gif
toweroff
AHB write buffer в даташите не нашел
Равно как и настройку пауз в ESMC
Точнее, пауза есть но только между read/write операциями, для write/write нет
RabidRabbit
Этот буфер описан в "arm968e-s technical reference manual".
toweroff
Цитата(RabidRabbit @ Oct 19 2012, 20:14) *
Этот буфер описан в "arm968e-s technical reference manual".

спасибо, буду копать
toweroff
Чисто практический вопрос по C (может, в нем дело?)

В первой функции есть обращение к памяти, где необходимо обращение каждый раз, когда используется по тому же адресу, генерить сигналя внешнего доступа (/OE, /CS, /WR)
Указатель объявляю как
Код
volatile unsigned int *mem;

во второй функции может приниматься любой указатель (как правило, тот же mem, но и буфер во внутренней пямяти, которые не-volatile)
оттуда осуществляется доступ по к этому указателю, так и к другой внешней памяти строго по фиксированным адресам, но память unsigned short

Чудес не бывает и Дед Мороз тоже не скоро придет
Девайс то работает, то нет

Как правильно компилятору объявить функции (точнее - типы параметров)?
Хотя LDR присутствуют после компиляции, но вот с глюками отладчика не могу выяснить где неполадки с указателями
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.