|
|
  |
STM32F103x, делимся впечатлениями |
|
|
|
Apr 4 2008, 14:34
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(pan_oleg @ Apr 4 2008, 18:11)  Спасибо что откликнулись. да не за что именно про это я Вам и говорил - у меня было то же самое при пошаговом бит снимался , а при последовательном - просто не успевает сняться . и2ц штука циклическая - так что если вы перед этин новым стартом "принимали " а потом решили завершить прием и принять заново , то в пмомент завершения вам придет событие (тот самый бит номер 6 ) что регистр не пуст , это вызвано тем что регистр приема передачи лежит над сдвиговым регистром и является как бы однобайтовым фифо буффером , дающим вам отставание (или опережение, это как посмотреть ) на один байт... выход проигнорируйте этот бит . если Вам лень делать по человечески (или пока лень) напишите так #define I2C_EVENT_MASTER_MODE_SELECT ((u32)0x00030001) /* BUSY, MSL and SB flag */ #define I2C_EVENT_MASTER_MODE_SELECT_2 ((u32)0x00030041) /* BUSY, MSL , RxNE and SB flag */ и обработайте оба события
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 4 2008, 15:01
|

Частый гость
 
Группа: Участник
Сообщений: 76
Регистрация: 16-11-07
Пользователь №: 32 387

|
я сделал несколько по другому, работает нормально, только что все 32 кБ  побайитно записал и считал я подпровил: Flag1 = I2Cx->SR1; Flag2 = I2Cx->SR2; Flag2 = Flag2 << 16; /* Get the last event value from I2C status register */ LastEvent = (Flag1 | Flag2) & I2C_EVENT; /* Check whether the last event is equal to I2C_EVENT */ if (LastEvent == I2C_EVENT ) в принципе ето и есть битовая маска, как вы считаете? или я неправельно сделал? вам огромный
|
|
|
|
|
Apr 7 2008, 19:14
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(pan_oleg @ Apr 4 2008, 19:01)  я сделал несколько по другому, работает нормально, только что все 32 кБ  побайитно записал и считал я подпровил: Flag1 = I2Cx->SR1; Flag2 = I2Cx->SR2; Flag2 = Flag2 << 16; /* Get the last event value from I2C status register */ LastEvent = (Flag1 | Flag2) & I2C_EVENT; /* Check whether the last event is equal to I2C_EVENT */ if (LastEvent == I2C_EVENT ) в принципе ето и есть битовая маска, как вы считаете? или я неправельно сделал? то есть вы проверяете , присутствует ли искомое событие в пришедшем статусе? Это полукорректный метод , более корректный чем плодить псевдоодинаковые статусы , но менее корректный чем обработать все биты "выбирая" их по одному или по группам , то есть бит RxNe то же надо отработать в зависимости от того "в каком положении" мы сейчас находимся. то есть в данном случае , если пришел байт , а мы ждали конца, то в принципе все корректно , а вот если произошла или ошибка , или непреднамеренный конец в дополнении к ожидаемому нами событию , то его нельзя игнорировать, иначе встанем в неприличную позу.
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 11 2008, 07:57
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 14-03-08
Пользователь №: 35 904

|
Цитата(KRS @ Feb 26 2008, 18:15)  OpenOCD вообще не умеет работать через SWD  , покрайней мере пока. Я тоже использую режим JTAG. А прошивку прилагаю, может понадобится что бы IAR определил устройство как LM FTDI Подскажите где взять схему под эту прошивку ? Спасибо !
|
|
|
|
|
Apr 11 2008, 18:30
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 14-03-08
Пользователь №: 35 904

|
А прошивку то во что заливать ? на в CPLD разве ?
в 93с46 чтоль ?
|
|
|
|
|
Apr 17 2008, 18:07
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(AlexandrY @ Jan 13 2008, 12:37)  Лучше скажите как умудрится сделать чтобы отладчик все время спотыкался на прерываниях. Такого никогда не было и в последнем компилере нет. Для этого в DHCSR есть бит MASKINTS, если его установить в еденицу то прерывания будут замаскированы (причем и при single step и при run в режиме отладки) что не всегда очень хорошо. IAR когда шагает по исходнику С ( не в дизассемблере) если возможно ставить точки останова ставит их и делает run (так что прерывания должны обходится). OpenOcd всегда чистит бит MASKINTS ( и это можно исправить при singlestep, а при resume оставить очистку). Вообще идеально было бы выбирать режим с прерываниями или без... Цитата(OVladimir @ Jan 13 2008, 12:43)  а точек останова да, больше: 8 вместо 2 в ARM7 На самом деле не 8, а 6 - компараторов 8, но только 6 могут быть использованы для точек останова. Я уже почти доделал совю реализацию GDB server на FT232/245R (уже совсем без использования openocd, его идеология не очень хорошо ложится на SWD), вообще даже при небольщой частоте SWD (в пределе 500 khz из-за особенностей FTDI) отладчик просто леатет ( скорость достигается за счет очереди и послыки сразу большого количества тарнзакций....) по сравнеию с обычным JTAG через FT2232C, да и пожалуй с Wiggler и некоторыми другими ( single step просто мгновенно отрабатывает) Но еще много работы, брекпоинты еще не реализованы.... Одно неприятно, ни в RDI ни в GDBServer не понятно как передавать системные регистры (которых нет в предыдущих версиях архитектур ARM)
|
|
|
|
|
Apr 24 2008, 12:12
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 8-02-07
Пользователь №: 25 165

|
Добрый день. Ответьте пожалуйста, данный чип работает с Wigler'ом. Или нужен обязательно J-LINK?
|
|
|
|
|
Apr 24 2008, 13:55
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 8-02-07
Пользователь №: 25 165

|
Ага, понятно. Но ведь есть CrossWorks, который умеет работать с виглером. Или я не прав?
|
|
|
|
|
Apr 24 2008, 19:52
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 23-11-06
Из: Odessa
Пользователь №: 22 646

|
А есть ли возможность во время работы контроллера сохранять во флеш память без торможения основной программы (наподобие памяти EEPROM у AVR)?
|
|
|
|
|
Apr 25 2008, 06:43
|
Знающий
   
Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057

|
А подскажите, мэтры Кортекса, применимость его в таком случае: имею микросхему с параллельным 5В интерфейсом (уровень "1" 3.5В), 8бит адрес/данные, 3 адрес, ALE-RD-WR-INT. Крутил и так и этак (корпус 48), не получается красиво. На двух портах только старшие байты 5В-толерантные, дальше побитно дергать надо. Без софтовых обработок адреса не получится. А жаль: хотелось попробовать новую платформу, но некрасиво не хочется делать.
ЗЫ: И как у них с доступностью на Украине?
|
|
|
|
|
  |
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|