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

 
 
 
Reply to this topicStart new topic
> Шаманить с указателями, или union
toweroff
сообщение Oct 17 2012, 18:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Попросил убрать из "Программирования"



есть две области в 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 Не работает
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 18 2012, 05:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Немного непонятно, если первая область 16 бит, то почему для обращения к ней используется unsigned int? Или там обмен 32-битными словами через 16-битную шину? Сайпресс какой?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 18 2012, 07:56
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

супресс 68013А
точно, указатель на int. Попробую переделать, напишу
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 18 2012, 10:25
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Переделал. Все равно шняга какая-то отправляется
Да еще кейл глючит, не хочет отлаживаться не то что с J-Link, но и со своим ULINK2 sad.gif
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 18 2012, 10:46
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Если подключение к сайпрессу асинхронное, попробуйте ногодрыгом почитать...
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 18 2012, 10:58
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(RabidRabbit @ Oct 18 2012, 14:46) *
Если подключение к сайпрессу асинхронное, попробуйте ногодрыгом почитать...

Да, асинхронное
А смысл в ногодрыге? Осцилл показывает вполне себе нормальные сигналы, все интервалы с очевидным запасом к минимальным из даташита на супресс (там 70нс, а у меня 110нс)
Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 18 2012, 10:58
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(toweroff @ Oct 18 2012, 14:25) *
Да еще кейл глючит, не хочет отлаживаться не то что с J-Link, но и со своим ULINK2 sad.gif

Оптимизацию не забыли убрать в ноль? А вообще я давно printf обхожусь.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 18 2012, 11:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

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

Вот что обнаружил. Запись в супресс происходит 2 раза. Непонятно почему, но SEMC выдает /CS, а потом два сигнала записи, потом убирает /CS
Так вот длительности /WR нормальные, как я их и установил, но вот интервал между ними - 32нс, что для супресса маловато. Сейчас попробую поиграть с этим
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 18 2012, 12:48
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Может включен "the AHB write buffer"? В любом случае, задержка между двумя записями должна помочь sm.gif
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 19 2012, 13:48
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



AHB write buffer в даташите не нашел
Равно как и настройку пауз в ESMC
Точнее, пауза есть но только между read/write операциями, для write/write нет
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 19 2012, 16:14
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Этот буфер описан в "arm968e-s technical reference manual".
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 19 2012, 16:31
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(RabidRabbit @ Oct 19 2012, 20:14) *
Этот буфер описан в "arm968e-s technical reference manual".

спасибо, буду копать
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 19 2012, 18:32
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

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

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

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

Как правильно компилятору объявить функции (точнее - типы параметров)?
Хотя LDR присутствуют после компиляции, но вот с глюками отладчика не могу выяснить где неполадки с указателями
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:41
Рейтинг@Mail.ru


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