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

 
 
> f149 UART1(SPI mode)&DataFlash - грабли
O.L.
сообщение Jun 10 2005, 07:28
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890



Пытаюсь отработать процедуры для AT45DB161. UART0 - SerialPort, UART1 SPI 3-wire.

Чтение и запись обоих буферов DataFlash проходит, есть грабельки, но не смертельные.
Прямое чтение страницы MM из DataFlash как и запись MM через оба буфера - вообще без проблем.
Операции стирания страниц, запись содержимого любого из буферов в любую страницу MM, загрузка любой страницы MM в любой буфер - не проходят вообще.
Перебор уровней оптимизации IAR-овского компайлера не влияет, процедуры то простенькие, существенной разницы в ассемблерных листингах нет.
Передрал несколько вариантов инициализации порта, вот так выглядит самый устойчивый.
Код
//    - initialisation spi1 UART module -----------
void spi1_init (void)
{
    U1CTL |= CHAR + SYNC + MM + SWRST;  // 8-bit, SPI, Master
    U1TCTL |= CKPL + SSEL1 + STC;      // Polarity, SMCLK, 3-wire
    U1BR0 = 0x02;          // SPICLK = SMCLK/2 ~ 4MHz
    U1BR1 = 0x00;
    U1MCTL = 0x00;
    ME2 |= USPIE1;          // Module enable
    U1CTL &= ~SWRST;      // Restart USART SPI, SPI enable
//    IE2 |= URXIE1 + UTXIE1;        // RX and TX interrupt enable
}

Опыта работы с DataFlash не так много. Собственно сами процедуры работы перенес с HiTech для pic18-го и DF AT45D011
Вторую неделю бъюсь и здравых мыслей уже нет. Остались только дурацкий колпак и бубен ...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
//Nikson
сообщение Apr 11 2006, 18:49
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- O.L.   f149 UART1(SPI mode)&DataFlash - грабли   Jun 10 2005, 07:28
- - kpv   Цитата(O.L. @ Jun 10 2005, 10:28)Вторую недел...   Jun 10 2005, 08:03
- - O.L.   "Несмертельные" грабли, Это при записи с...   Jun 10 2005, 08:29
|- - kpv   первое, что бросается в глаза UTXIFGx, indicates t...   Jun 10 2005, 09:03
|- - kpv   при таком варианте, по опросу, попробуй использова...   Jun 10 2005, 09:05
|- - O.L.   Цитата(kpv @ Jun 10 2005, 16:05)при таком вар...   Jun 10 2005, 10:00
|- - kpv   Цитата(O.L. @ Jun 10 2005, 13:00)Слабоват я п...   Jun 10 2005, 10:06
|- - O.L.   Цитата(kpv @ Jun 10 2005, 17:06)Цитата(O.L. ...   Jun 10 2005, 10:20
|- - kpv   а как, собственно, определяется, что запись не про...   Jun 10 2005, 10:27
|- - kpv   все, как было, можно было и оставить, только перед...   Jun 10 2005, 10:30
|- - O.L.   Всяко по прерываниям лучше, я ж не спорю. Доберусь...   Jun 10 2005, 10:59
- - rezident   У меня такая процедура инициализации SPI. Код voi...   Jun 10 2005, 09:25
- - O.L.   Грамотная инициализация, спасибо. Сейчас буду корр...   Jun 10 2005, 09:53
|- - kpv   Цитата(O.L. @ Jun 10 2005, 12:53)У меня кварц...   Jun 10 2005, 10:11
- - rezident   Я на прерывания посадил простой транспортный прото...   Jun 10 2005, 13:16
- - rezident   //Nikson, два момента. 1. Вы бы не поленились еще...   Apr 11 2006, 19:52
- - //Nikson   rezident, Да, точно. Эти 2 куска управляют только ...   Apr 11 2006, 21:12
- - rezident   Цитата(//Nikson @ Apr 12 2006, 03:12) ИМХ...   Apr 11 2006, 21:43


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

 


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


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