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

 
 
> замена AT45DB161B-RI на AT45DB161D-SU, проблема с отсутствием ноги RDY/~BUSY
plombir
сообщение Nov 17 2006, 12:33
Сообщение #1


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

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Доброго дня, Господа!

Так как м/с flash AT45DB161B-RI (28 ног) снята с производства, решено заменить её на 8-и ножечную. Так, вот, проблема возникла при написании кода определения занятости м/с. Если раньше сигнал проверялся на ноге RDY/~BUSY и проблем не было, то здесь она отсутствует и приходится проверять через "Регистр Статуса" 7-ой бит. Что то не получается... Перепробовал по разному и по всякому. Начинает работать если ставится задержка из цикла NOP-ов вместо ожидания.

Если кто сталкивался с программным опросом м/с flash AT45 через регистр, подскажите пожалуйста последовательность действий при ожидании занятости.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Mar 31 2007, 10:00
Сообщение #2


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Единственное, у меня IAR строчки вида S0SPSR; просто выкидывает. Хотя это явная ошибка

Вспоминается, что если S0SPSR объявлен как volatile, то не должон. Если объявлен не так, то компилер имеет полное право. В iomacro.h написано, что
SFR_B разворачивается в __io union, а в мануале пишут
The __io memory attribute implies that objects are __no_init and volatile.
Если правда игнорит, то действительно невесело.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 31 2007, 13:24
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sensor_ua @ Mar 31 2007, 09:00) *
Вспоминается, что если S0SPSR объявлен как volatile, то не должон. Если правда игнорит, то действительно невесело.
В том то и дело:
Код
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)\
                        volatile __no_init ATTRIBUTE union \
                         {                                 \
                           unsigned long NAME;             \
                           BIT_STRUCT NAME ## _bit;      \
                         } @ ADDRESS
__IO_REG32_BIT(S0SPSR, 0xE0020004,__READ,__spsr_bits);
//-----------------------------------
    S0SPSR = 0;
    S0SPSR;          // Warning[Pe174]: expression has no effect
    S0SPSR = 0;
//-----------------------------------
    379              S0SPSR = 0;
   \   000001BC   041082E5           STR         R1,[R2, #+0x4]
    380              S0SPSR;
    381              S0SPSR = 0;
   \   000001C0   041082E5           STR         R1,[R2, #+0x4]
Я помню, ReAl когда-то писал, что подобные выражения оформляет как (void)S0SPSR; чтобы самому себе напомнить, что это не описка а чтение. Но, увы, IAR тут делает большой промах. Хотя по доке вроде все нормально:
Цитата
Descriptions of implementation-defined behavior
Access to volatile objects (6.5.3)
Any reference to an object with volatile qualified type is an access.
Смущает только упоминание implementation-defined behavior. Надо будет на работе в стандарт глянуть - что там об этом случае сказано.

P.S. Ветка как-то плавно уползла от AVR к ARM, но описанная проблема относится ко всем IAR, с которыми работал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 31 2007, 16:32
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Сергей Борщ @ Mar 31 2007, 12:24) *
P.S. Ветка как-то плавно уползла от AVR к ARM, но описанная проблема относится ко всем IAR, с которыми работал.

Да нету проблемы. Использую постоянно. Ниже первый попавшийся кусок, где дважды используется пустышка. Командная строка и листинг прилагаются.

Код
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.41A/W32   27/Mar/2007  19:41:57 /
// Copyright 1999-2005 IAR Systems. All rights reserved.                     /
//                                                                           /
//    Cpu mode        =  arm                                                 /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  D:\ARM_WORK\pcmu\MAIN\SPI.C                         /
//    Command line    =  D:\ARM_WORK\pcmu\MAIN\SPI.C -D LPC2000_IAR -lC      /
//                       D:\ARM_WORK\pcmu\Works\List\ -lA                    /
//                       D:\ARM_WORK\pcmu\Works\List\ --remarks -o           /
//                       D:\ARM_WORK\pcmu\Works\Obj\ -s9 --debug --cpu_mode  /
//                       arm --endian little --cpu ARM7TDMI-S --stack_align  /
//                       4 --warnings_affect_exit_code                       /
//                       --no_path_in_file_macros -e --require_prototypes    /
//                       --fpu None --dlib_config "D:\IAR\Embedded           /
//                       Workbench\arm\LIB\dl4tpannl8n.h" -I                 /
//                       D:\ARM_WORK\pcmu\..\COMMON\RTOS\portable\IAR\LPC200 /
//                       0\ -I D:\ARM_WORK\pcmu\..\COMMON\RTOS\include\ -I   /
//                       D:\ARM_WORK\pcmu\..\COMMON\include\ -I              /
//                       D:\ARM_WORK\pcmu\MAIN\include\ -I "D:\IAR\Embedded  /
//                       Workbench\arm\INC\" --inline_threshold=2            /
//    List file       =  D:\ARM_WORK\pcmu\Works\List\SPI.s79                 /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

....

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function fpga_switch
        ARM
//  int fpga_switch( WORD data, WORD addr )
//  {
//  ulong value = ( 0x9C0000>>(8+2) );
//  int ret_data;
//  value |= (addr>>8)|((addr&0x1F)<<3);      
//  value <<= 8;
//  value |= (data>>8)|((data&0x1F)<<3);      
//  value <<= 2;
fpga_switch:
        LSR      R2,R1,#+8
        AND      R1,R1,#0x1F
        ORR      R1,R2,R1, LSL #+3
        ORR      R1,R1,#0x2700
        LSR      R2,R0,#+8
        AND      R0,R0,#0x1F
        ORR      R0,R2,R0, LSL #+3
        ORR      R0,R0,R1, LSL #+8
        LSL      R1,R0,#+2
//  IO0CLR = P0B_SEL_FPGA;    // Select(soft)
        MOV      R0,#-536870908
        ORR      R0,R0,#0x28000
        MOV      R2,#+268435456
        ORR      R2,R2,#0x1000
        STR      R2,[R0, #+8]
//  SSPDR  = value>>16;
        MOV      R3,#-536870904
        ORR      R3,R3,#0x68000
        LSR      R12,R1,#+16
        STR      R12,[R3, #+0]
//  IO0SET = P0B_SEL_FPGA;    // Unselect
        STR      R2,[R0, #+0]
//  while( !(SSPSR & SSPSR_RNE) );
??fpga_switch_0:
        LDR      R0,[R3, #+4]
        TST      R0,#0x4
        BEQ      ??fpga_switch_0
//  ret_data = SSPDR;
        LDR      R0,[R3, #+0]
//  SSPDR = value>>8;
        LSR      R2,R1,#+8
        STR      R2,[R3, #+0]
//  while( !(SSPSR & SSPSR_RNE) );
??fpga_switch_1:
        LDR      R2,[R3, #+4]
        TST      R2,#0x4
        BEQ      ??fpga_switch_1
//  SSPDR;
        LDR      R2,[R3, #+0]
//  SSPDR = value;
        STR      R1,[R3, #+0]
//  while( !(SSPSR & SSPSR_RNE) );
??fpga_switch_2:
        LDR      R1,[R3, #+4]
        TST      R1,#0x4
        BEQ      ??fpga_switch_2
//  SSPDR;
        LDR      R1,[R3, #+0]
//  return( ret_data );
        MOV      PC,LR           ;; return
        CFI EndBlock cfiBlock7
//  }


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 31 2007, 16:45
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ Mar 31 2007, 15:32) *
Да нету проблемы.
Конечно! А я, значит, листинг и варнинг компилятора сам сочинил?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- plombir   замена AT45DB161B-RI на AT45DB161D-SU   Nov 17 2006, 12:33
- - prottoss   Цитата(plombir @ Nov 17 2006, 19:33) Добр...   Nov 17 2006, 12:41
- - VDG   Цитата(plombir @ Nov 17 2006, 15:33) Если...   Nov 17 2006, 12:42
- - prottoss   Раз уж создана тема про ДатаФлэш, хотелось бы спро...   Nov 17 2006, 15:14
|- - zltigo   Цитата(prottoss @ Nov 17 2006, 17:14) Раз...   Nov 17 2006, 19:36
|- - rezident   Цитата(prottoss @ Nov 17 2006, 20:14) Раз...   Nov 17 2006, 20:23
|- - prottoss   Цитата(rezident @ Nov 18 2006, 03:23) На ...   Nov 18 2006, 16:17
- - vesago   Я из экономии ног и 28 ноговую db161 опрашивал чер...   Nov 17 2006, 19:29
- - Ykidia   ЦитатаНичего сложного там нет. Читаете даташит и с...   Mar 28 2007, 12:41
|- - Сергей Борщ   Цитата(Ykidia @ Mar 28 2007, 11:41) Так ч...   Mar 28 2007, 13:05
- - Ykidia   Спасибо за ответ. У меня примерно такой же код (со...   Mar 28 2007, 13:25
|- - Сергей Борщ   Цитата(Ykidia @ Mar 28 2007, 12:25) однак...   Mar 28 2007, 13:47
- - add   Работал с AT45DB041 в soic8 корпусе. Там нет ножк...   Mar 28 2007, 13:35
- - Ykidia   Да, фиктивную передачу делаю, иначе просто бит око...   Mar 28 2007, 14:38
|- - Сергей Борщ   Цитата(Ykidia @ Mar 28 2007, 13:38) Да, ф...   Mar 29 2007, 13:46
- - Itch   Насколько я понял из даташита, читать весь статусн...   Mar 28 2007, 21:42
- - Artem_Petrik   Цитатаdo { DF_ChipSelect_Start(); ...   Mar 28 2007, 22:30
- - Ykidia   Вот они: Код#define SPI_MODE 0x38 // MSTR CPOL...   Mar 30 2007, 10:17
|- - Сергей Борщ   Цитата(Ykidia @ Mar 30 2007, 09:17) Вот о...   Mar 30 2007, 12:53
|- - zltigo   Цитата(Сергей Борщ @ Mar 31 2007, 15:45) ...   Mar 31 2007, 17:03
- - Ykidia   ЦитатаВы же данные не тем концом суете. Вообще-то ...   Mar 31 2007, 20:59
|- - Сергей Борщ   Цитата(Ykidia @ Mar 31 2007, 19:59) Ну а ...   Mar 31 2007, 22:57
|- - defunct   Цитата(Ykidia @ Mar 31 2007, 19:59) Вообщ...   Apr 1 2007, 04:56
|- - zltigo   Цитата(defunct @ Apr 1 2007, 03:56) Я бы ...   Apr 1 2007, 09:18
- - sensor_ua   ЦитатаЯ бы так ни в жизнь не написал А меня задолб...   Apr 1 2007, 08:27
- - Ykidia   ЦитатаЯ бы попробовал с таким максимально простым ...   Apr 1 2007, 23:48
|- - defunct   Цитата(Ykidia @ Apr 1 2007, 22:48) и оказ...   Apr 2 2007, 00:08
- - Ykidia   Доброе утро! ЦитатаV32 это естьtypedef volati...   Apr 2 2007, 00:18
- - Ykidia   Господа! Прошу простить меня за беспокойство...   Apr 3 2007, 16:37
- - Ykidia   Забыл сказать всем ответившим - большое спасибо за...   Apr 3 2007, 22:34


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

 


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


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