Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Регистр SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Semicon
Привет Всем!
У меня есть следующая задача:
1)Исходные данные:
-контроллер STM32F051C6
-среда IAR for ARM 6.40.1.3812

2)Необходимо:
-посмотреть значение регистра SPI1_DR

3)Решение:
-смотрю значения в режиме Debug в IAR
-смотрю значения регистра в памяти по адресу 0x400300C
-смотрю значения в STM Studio

4)Проблема:
-отображаются значения не соответствующие моим ожиданиям((( например в случае с Debug выводит значение 0xFF

Подскажите пожалуйста кто решал для себя такую задачу - как мне точно контролировать значения которые я принимаю или отсылаю по SPI (ответы типа посмотри осциллографом не принимаются))))) - я программист)))
aaarrr
Принять процессором, положить куда-нибудь в память и смотреть. Если пытаться смотреть debugger'ом регистры периферии, то результат очень и очень часто не будет отвечать ожиданиям.
Semicon
Цитата(aaarrr @ Dec 4 2012, 14:24) *
Принять процессором, положить куда-нибудь в память и смотреть. Если пытаться смотреть debugger'ом регистры периферии, то результат очень и очень часто не будет отвечать ожиданиям.


А что корректно тогда смотреть debugger'ом ?
_Артём_
Цитата(Semicon @ Dec 4 2012, 12:50) *
А что корректно тогда смотреть debugger'ом ?

Корректно смотреть например ОЗУ.
Проблемы с периферией могут быть например такие:
отладчик подсмотрел состояние какого-нибудь UART-а, прочитав регистр данных и в результате его уже не прочитает программа - данные прочитаны и флаги о приёме сброшены.
scifi
Цитата(Semicon @ Dec 4 2012, 14:50) *
А что корректно тогда смотреть debugger'ом ?

Очевидно, имелся в виду тот факт, что чтение некоторых регистров приводит к изменению состояния периферии. Если правильно помню, то один из таких регистров - это I2C_SR1. Просмотрев по диагонали SPI, таких регистров я там не увидел. Так что эти опасения напрасны, скорее всего.
aaarrr
Цитата(scifi @ Dec 4 2012, 15:04) *
Просмотрев по диагонали SPI, таких регистров я там не увидел. Так что эти опасения напрасны, скорее всего.

При чтении SPI_DR будут выдернуты данные из FIFO. Последствия, думаю, понятны.

Цитата(Semicon @ Dec 4 2012, 14:50) *
А что корректно тогда смотреть debugger'ом ?

В данном случае Вам нужно завести локальную статическую переменную, и записывать в нее данные перед записью SPI_DR. Смотреть, соответственно, ее же.
SPI_DR при чтении и при записи - это два физически разных регистра.
KRS
Цитата(Semicon @ Dec 4 2012, 14:02) *
(ответы типа посмотри осциллографом не принимаются))))) - я программист)))

При таком подходе из вас программист микроконтроллеров не получится!

Можно в окне дизассемблера поставить брекпоинт на след команду после чтения из SPI_DR.
И в окне обычных регистров посмотреть что считалось.

Кроме того часто бывает полезно не открывать регистры UART, SPI и другой периферии с FIFO потому что это может нарушить поток данных.

Цитата
Вопрос: сколько надо программистов, чтобы закрутить лампочку?
Ответ: ни одного. Это аппаратная проблема, программисты их не решают!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.