|
замена AT45DB161B-RI на AT45DB161D-SU, проблема с отсутствием ноги RDY/~BUSY |
|
|
|
 |
Ответов
|
Mar 31 2007, 10:00
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 31 2007, 13:24
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Mar 31 2007, 16:32
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|