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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> f149 UART1(SPI mode)&DataFlash - грабли
//Nikson
сообщение Apr 11 2006, 18:49
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



Поднимаю старую тему.

Есть F149 и две SPI-DataFlash - AT25F2048 и AT45DB161B. Инициализацию SPI (UART1) сделал на основе примеров из этой темы. Никакой связи с памятью наладить не удалось - выяснилось что на выводе контроллера P5.3 нет тактового сигнала UCLK. Вместо него или высокий уровень если установлен бит CKPL, или низкий если бит не установлен (по крайней мере вывод рабочий). Почему так - понять не могу.

Из программы удалил всё, что не касается SPI. Осталось вот что:
Код
int main()
{

  WDTCTL = WDTPW + WDTHOLD;
  IE1   |= OFIE + WDTIE;
  IFG1  |= OFIFG;
  
  __enable_interrupt();
  
  AT25SEL &= ~AT25LN;
  AT25DIR |= AT25LN;
  AT25CS_HI;
  
  AT45SEL &= ~AT45LN;
  AT45DIR |=  AT45LN;
  AT45CS_HI;
  
   IE2 &= ~(UTXIE1 + URXIE1);
   U1CTL = SWRST;
   U1CTL |= CHAR + SYNC + MM;
   U1TCTL = CKPL + SSEL1 + STC;
   U1BR1  = 0x00;
   U1BR0  = 0x04;
   U1MCTL = 0x00;
   ME2 |= USPIE1;
   U1CTL &= ~SWRST;
   //IE2 |= UTXIE1 + URXIE1;

   P5SEL |= 0x0E;
   P5DIR |= 0x0A;

   P1DIR = 0x10; //проверка наличия SMCLK
   P1SEL = 0x10;  


  while(1)
  {

  }

  return 0;
}

и тактирование (кварц 7,32 МГц и 32КГц)
Код
#pragma vector = NMI_VECTOR
__interrupt void OSCfault_ISR(void)
{
BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;
BCSCTL1 = DIVA_0 + RSEL2 + RSEL1 + RSEL0;
DCOCTL = DCO1 + DCO2;
while ((IFG1 & OFIFG) != 0) IFG1 &=~OFIFG;
BCSCTL2 = SELM_2 + DIVM_0 + DIVS_0 + SELS;
}


На ноге 16 SMCLK есть. Пробовал разные варианты U1BR1 и U1BR0, пробовал тактирование от ACLK - результат тот же.

Конфигурация выводов после выполнения программы:
P5SEL=0b00001110
P5DIR=0b00011011
P5OUT=0b00010001
(т.е. вывод 5.3 - периферийный модуль, на вывод, обе памяти в состоянии сброса)

вроде бы всё правильно.... и не работает. нужен свежий взгляд.

Подскажите в каком направлении копать, пожалуйста. (может ли дело быть в схемотехнике? может, какая обвязка нужна - у меня всё соединено напрямую).
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 11 2006, 19:52
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



//Nikson, два момента.
1. Вы бы не поленились еще хидер с дефайнами к исходнику приложить. А то как можно найти чужую ошибку, когда такой блок видишь?
Цитата
AT25SEL &= ~AT25LN;
AT25DIR |= AT25LN;
AT25CS_HI;

AT45SEL &= ~AT45LN;
AT45DIR |= AT45LN;
AT45CS_HI;

2. SPI это синхронный интерфейс для обмена данными. Чтобы что-то принять, нужно что-то передать. Где у вас в исходнике команда записи в UxTXBUF? Или вы предполагаете, что UCLK для SPI сам по себе постоянно генерится?
В общем RTFM.

P.S. ИМХО не совсем хорошо залезать в чужую тему со своими проблемами. Заведите свою собственную. Так более корректно будет.
Go to the top of the page
 
+Quote Post
//Nikson
сообщение Apr 11 2006, 21:12
Сообщение #18


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



rezident,
Да, точно. Эти 2 куска управляют только сигналами ChipSelect для двух микросхем памяти. На SPI влияния не оказывают, поэтому из поля зрения упустил.

Что касается UCLK и U1TXBUF... У меня-то именно передача и не работала. Поиск неисправности в первую очередь начал с проверки тактового сигнала. Обнаружилось, что его нет - вот я и бросился активно его искать, максимально урезав код, убрал всё что хоть как-то могло повлиять (в том числе и запись данных в буфер передатчика)- до этого момента был уверен, что он должен генерироваться постоянно пока включён модуль, независимо от состояния приёма/передачи в данный момент. Ну не знаю, почему я это так придумал sad.gif ....К сожалению, теперь выходит что не UCLK дело и надо рыть глубже. По крайней мере не буду топтаться на одном месте. Спасибо.

ЗЫ. Хорошо, замечание по поводу тем принято. Приношу свои извинения.
Просто иногда на форумах проповедуется идеология "все схожие вопросы в одной теме". Сделано для того, чтобы человек при решении проблемы поиском наткнулся на одну тему, прочитал её от начала до конца и разобрался. А не рылся в залежах тем-близнецов. ИМХО какая-то логика в этом есть, но в чужой монастырь со своим уставом не ходят smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 11 2006, 21:43
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(//Nikson @ Apr 12 2006, 03:12) *
ИМХО какая-то логика в этом есть, но в чужой монастырь со своим уставом не ходят smile.gif [/i]

Я не указывал вам, а лишь высказал свое мнение. Не я местный "устав" составлял, но я ему подчиняюсь. "Бурундук - птичка" что тут поделаешь? smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 05:43
Рейтинг@Mail.ru


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