ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
562544 Топик полностью
Dingo (27.11.2014 11:47 - 28.11.2014 16:20, просмотров: 163) ответил Nikolay801_ на странно. прицепи два младших бита данных к анализатору, надо бы глянуть что именно передается в этих циклах
[Solved]Опять кругами хожу. Мне нужен ModeA или ModeD. Засада была в том, что у них в корпусах с меньшим количеством ножек не все сигналы выводятся. И для режима SRAM 8 бит без мультиплексирования это младшие разряды адресной шины! Поэтому надо использовать расширенный режим с таймингами BTR1 и BWTR1 ( bank 1 for NOR/PSRAM). Опрелеяю структуру для работы с IO: #define M_BASE ((uint32_t)(0x60000000)) #define MADDR ((uint32_t)((0x60000000 | 0x100)-4)) #define M_ADDR ((Modem_TypeDef *) MADDR) Теперь можем писать: for (i=0;i<8;i++) { M_ADDR->data[i] = i; } порождаемый листинг: 80004a8: 2300 movs r3, #0 for (i=0;i<8;i++) { M_ADDR->data[i] = i; 80004aa: 4a07 ldr r2, [pc, #28] ; (80004c8 <main+0x88>) 80004ac: b2d9 uxtb r1, r3 80004ae: 54d1 strb r1, [r2, r3] 80004b0: 3301 adds r3, #1 for (i=0;i<8;i++) { 80004b2: 2b08 cmp r3, #8 80004b4: d1f9 bne.n 80004aa <main+0x6a> 80004b6: e7ef b.n 8000498 <main+0x58> 80004c8: 600000fc .word 0x600000fc Для работы нужно предварительно подать тактирование, инициализировать gpio и подключить их к "альтернативной функции". Уже и от библиотеки отказался во избежание неожиданностей. void initFSMC( void) { FSMC_NORSRAMInitTypeDef modemInit_str; FSMC_NORSRAMTimingInitTypeDef modemTimings; // --- initialization FSMC --- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOB, ENABLE); //clock for FSMC RCC_AHB3PeriphClockCmd( RCC_AHB3Periph_FSMC, ENABLE); GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_FSMC); // configure GPIOE [4:8] gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; //gpio.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; gpio.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | \ GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_25MHz; GPIO_Init( GPIOE, &gpio); // configure GPIOD [0,1,4,5,7,14,15] gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; //gpio.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_14 | GPIO_Pin_15; gpio.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_14 | GPIO_Pin_15 | \ GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_25MHz; GPIO_Init( GPIOD, &gpio); // configure GPIOB [7] gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Pin = GPIO_Pin_7; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Speed = GPIO_Speed_25MHz; GPIO_Init( GPIOB, &gpio); // over Register // Timings MODE A //ACCMOD BUSTURN DATAST ADDHLD // || |||| | | | | ADDSET // 33 22 2222 2222 1111 111111 | | | // 10 98 7654 3210 9876 54321098 7654 3210 // oo 00 oooo oooo 0000 00000101 oooo 0011 BTR1,BWTR=0x00000503 FSMC_Bank1E->BWTR[0]=(uint32_t) 0x0503; //WriteMode timings FSMC_Bank1->BTCR[1]=(uint32_t) 0x0503; //ReadMode timings // EXTMOD WREN MTYP[SRAM|PSRAM|NOR] // | | MWID[8|16] || MUXEN // 332222222222 1 111 1 1 1 1 1 1 || || | MBKEN // 109876543210 9 876 5 4 3 2 1 0 9 8 7 6 54 32 1 0 // oooooooooooo.0 000.0 1 0 1.o 0 o 0.l o 00.01 0 1 BCR1=0x0000 5085 FSMC_Bank1->BTCR[0]=(uint32_t) 0x5085; } Не работает полностью! Как я понимаю, пин PE11 ( служит DA8) должен быть выходом при MUXEN=0x0 and MWID=0x0 (не мультиплексировать, 8 бит). Верно? но получаю такую фигню: Блин, этот FSMC не умеет с 8 битным устройством работать? Только через битбанг?
imageimage