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

 
 
 
Reply to this topicStart new topic
> Не заводится TWI1 на ATSAM3S4A
Andreyy
сообщение Dec 15 2015, 16:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 29-05-08
Пользователь №: 37 929



Здраствуйте,
Имеется плата на базе ATSAM3S4A , на шине I2C - M41T00 http://s16.postimg.org/pnt0c22ed/scheme.jpg.
По умолчанию на пинах предназначенные для TWI1 сидит SystemFunction - JTAG (TDI/TDO).
Меняю на PerepheriaA так
ioport_set_pin_mode( PIO_PB4_IDX, PIO_PERIPH_A );ioport_disable_pin( PIO_PB4_IDX );
ioport_set_pin_mode( PIO_PB5_IDX, PIO_PERIPH_A );ioport_disable_pin( PIO_PB5_IDX );
В итоге получаю бесконечный цикл в функции
twi_master_write()
{...while (1) {status = p_twi->TWI_SR;
if (status & TWI_SR_NACK) {return TWI_RECEIVE_NACK;}
if (status & TWI_SR_TXRDY) {break;}}..
}
Если подключить M41T00 к TWI0(и соответственно настроить), то все работает.
Так же я пробовал отключать JTAG - на JTAGSEL подавал 3.3В - не помогло.
Т.е. получается как-будто я неправильно меняю функцию пинов..

Сообщение отредактировал Andreyy - Dec 15 2015, 16:51
Go to the top of the page
 
+Quote Post
ataradov
сообщение Dec 15 2015, 17:34
Сообщение #2


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

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Не знаю что именно делают те функции, но самый простой метод отключить альтернативные функции - сделать это напрямую:
CODE
MATRIX->CCFG_SYSIO |= CCFG_SYSIO_SYSIO4 | CCFG_SYSIO_SYSIO5 | CCFG_SYSIO_SYSIO6 | CCFG_SYSIO_SYSIO7;

Go to the top of the page
 
+Quote Post
DmitryM
сообщение Dec 15 2015, 19:24
Сообщение #3


Знающий
****

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



Цитата(ataradov @ Dec 15 2015, 20:34) *
Не знаю что именно делают те функции, но самый простой метод отключить альтернативные функции - сделать это напрямую:
Код
MATRIX->CCFG_SYSIO |= CCFG_SYSIO_SYSIO4 | CCFG_SYSIO_SYSIO5 | CCFG_SYSIO_SYSIO6 | CCFG_SYSIO_SYSIO7;

Эти функции оперируют с PIO, а как совершенно справедливо замечено, для системных требуется ещё Matrix .

Цитата(Andreyy @ Dec 15 2015, 19:41)
Так же я пробовал отключать JTAG - на JTAGSEL подавал 3.3В

Читаем внимательно назначение jtagsel.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Dec 15 2015, 19:27
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(Andreyy @ Dec 15 2015, 19:41) *
twi_master_write()
{...while (1) {status = p_twi->TWI_SR;
if (status & TWI_SR_NACK) {return TWI_RECEIVE_NACK;}
if (status & TWI_SR_TXRDY) {break;}}..
}

а с тем ли блоком регистров вы работаете? - их там два набора..
о тактирование и разрешение работы соответствующего узла не спрашиваю..
Go to the top of the page
 
+Quote Post
Andreyy
сообщение Dec 16 2015, 08:15
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 29-05-08
Пользователь №: 37 929



Цитата(ataradov @ Dec 15 2015, 21:34) *
Код
MATRIX->CCFG_SYSIO |= CCFG_SYSIO_SYSIO4 | CCFG_SYSIO_SYSIO5 | CCFG_SYSIO_SYSIO6 | CCFG_SYSIO_SYSIO7;

Спасибо, те функции есс-но в матрицу не лазили отключать SYS'ы
Теперь проблема - "Error connecting to device over JTAG" smile3046.gif
Исп-я Jlink v.8, по идее ведь он должен МК при операции ERASE или FLASH сбрасывать,(пробовал к NRST'у мк подключать и TRST и SRST от отладчика)..
Go to the top of the page
 
+Quote Post
ataradov
сообщение Dec 16 2015, 08:17
Сообщение #6


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

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (Andreyy @ Dec 16 2015, 02:15) *
Теперь проблема - "Error connecting to device over JTAG" smile3046.gif
Только пин ERASE в высокий уровень выставлять при подаче питания.

Я еще обычно такие деструктивные операции делаю с задержкой 1-2 секунды, это дает время сбросить проц и стереть память без внешнего воздействия.

Сообщение отредактировал ataradov - Dec 16 2015, 08:19
Go to the top of the page
 
+Quote Post
Andreyy
сообщение Dec 16 2015, 08:45
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 29-05-08
Пользователь №: 37 929



Цитата(ataradov @ Dec 16 2015, 12:17) *
Только пин ERASE в высокий уровень выставлять при подаче питания.

Я еще обычно такие деструктивные операции делаю с задержкой 1-2 секунды, это дает время сбросить проц и стереть память без внешнего воздействия.

Чип я обнулил, и тоже задержку сделал - работает, еще раз спасибо!

Сообщение отредактировал Andreyy - Dec 16 2015, 08:52
Go to the top of the page
 
+Quote Post

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

 


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


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