Jump to content

    

kostyan1

Участник
  • Content Count

    121
  • Joined

  • Last visited

Everything posted by kostyan1


  1. Что то Вы маленько "не договариваете": define region ROM2_region = mem:[from __ICFEDIT_region_ROM0_start__ to __ICFEDIT_region_ROM0_end__] |mem:[from __ICFEDIT_region_ROM1_start__ to __ICFEDIT_region_ROM1_end__]; place in ROM2_region { readonly };
  2. Первый регион флэша активно используется: define region ROM2_region = mem:[from __ICFEDIT_region_ROM0_start__ to __ICFEDIT_region_ROM0_end__] |mem:[from __ICFEDIT_region_ROM1_start__ to __ICFEDIT_region_ROM1_end__]; Плюс мэп файл говорит: " 127 783 bytes of readonly code memory 61 561 bytes of readonly data memory 45 554 bytes of readwrite data memory" После Ваших советов проект перестал компиляться. А сделал как тут уже находил инфу про размещение функции по определенному адресу: разместил один метод класса в первом банке. Поработал, пописал код. Потом убрал "подпорочные" директивы - и вуаля - теперь компилится без первоначальной ошибки! Получилось, что сумел подопнуть линкер вручную :)
  3. Народ, столкнулся с такой проблемой. Проц SAM3U4. Там два банка флэша. Icf файл у меня такой: /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x00080000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM0_start__ = 0x00080000; define symbol __ICFEDIT_region_ROM0_end__ = 0x0009FFFF; define symbol __ICFEDIT_region_ROM1_start__ = 0x00100000; define symbol __ICFEDIT_region_ROM1_end__ = 0x0011FFFF; define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000; define symbol __ICFEDIT_region_RAM1_end__ = 0x20008000; define symbol __ICFEDIT_region_RAM2_start__ = 0x20080000; define symbol __ICFEDIT_region_RAM2_end__ = 0x20083FFF; define symbol __ICFEDIT_region_RAM3_start__ = 0x20100000; define symbol __ICFEDIT_region_RAM3_end__ = 0x20101080; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x500; /*0x1000*/ define symbol __ICFEDIT_size_heap__ = 0; define symbol __ICFEDIT_size_storage__ = 0x4000;/*0x3500; 0x3000*/ define symbol __ICFEDIT_size_nand_storage__ = 0x1080; /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM0_region = mem:[from __ICFEDIT_region_ROM0_start__ to __ICFEDIT_region_ROM0_end__]; define region ROM1_region = mem:[from __ICFEDIT_region_ROM1_start__ to __ICFEDIT_region_ROM1_end__]; define region ROM2_region = mem:[from __ICFEDIT_region_ROM0_start__ to __ICFEDIT_region_ROM0_end__] |mem:[from __ICFEDIT_region_ROM1_start__ to __ICFEDIT_region_ROM1_end__]; define region RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_end__]; define region RAM2_region = mem:[from __ICFEDIT_region_RAM2_start__ to __ICFEDIT_region_RAM2_end__]; define region RAM3_region = mem:[from __ICFEDIT_region_RAM3_start__ to __ICFEDIT_region_RAM3_end__]; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; define block TempStorage with alignment = 4, size = __ICFEDIT_size_storage__ { }; define block NandStorage with alignment = 4, size = __ICFEDIT_size_nand_storage__ { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM2_region { readonly }; place in RAM1_region { readwrite, block CSTACK, block HEAP }; place in RAM2_region { block TempStorage }; place in RAM3_region { block NandStorage }; Столкнулся с такой проблемой. В определенный момент времени стал получать при компиляции такую радость: "TApplication.cpp Tool Internal Error: Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 007ADD2E (reading from address 0x0)" Посмотрел мап файл еще компилящегося проекта - там класс TApplication.cpp расположен вконце второго банка флеша. Дописываю пару строчек кода, размер класса увеличивается и не влазит во флеш. Но размер класса таков, что запросто может поместиться в первом банке флеша, и места там хватает с лихвой. Два вопроса собственно: какова... и как исправить? Руками размещать код класса по определенному адресу не хочется (я и не знаю как), хотелось бы что бы линкер это дело разруливал! Временно решил проблему путем максимальной оптимизации по размеру, но это не выход, ибо оптимизация для меня, скажем так, по религиозным причинам не канает впринципе. Может у меня icf файл "неправильный" или опции линкера какието особые есть на такой случай?
  4. Eclipcse - IAR plugin

    "можно ли сделать так чтоб писать код в клипсе, а отлаживать в иаре?" Так как не могу на работе себе позволить (правильно настроить) такую роскошь как собственно сабж (фаервол думаю мне жаву коробит), то только так и работаю: пишу в еклипсе отлаживаю в иаре. Для чего создаю в одной директории проекты и для иара и для еклипса. В иаре повторяю файловую иерархию проекта еклипсовского. Возможно не айс, в плане много действий ручками, но уж как смог...
  5. to prgjz: как то так повелось, что не люблю я работу по всяким таймаутам и полингам, когда можно все сделать по прерываниям, но Ваш вариант возможно таки проверю. А скажите при работе Ваш логгер как часто по таймауту вываливается? Сколько миллисекунд таймаут? Что делаете при вываливании - повторяете запись в ту же страницу?
  6. Если Вам несложно проверить, в конце вместо "Wait 2 SD clocks", поставьте паузу в 1 секунду плиз - будет ли работать?
  7. Спасибо, посмотрю конечно, но это не то! Там в примерах просто передача "большого" буфера состоящего из нескольких блоков по 512 байт. У меня такой задачи нет. У меня задача: один раз перевести карточку в режим мультиблока (CMD13+CMD25), а потом раз в какое то время скидывать в неё 512 байт данных по ДМА. При этом не вызывая каждый раз при записи очередного блока данных CMD13 (и ту же CMD25). Такая логика реализована в примерах для иара для sam3u, отлично работает. На филипке не могу добиться подобного.
  8. Atmel SAM3U4

    Народ, в документиции написано: – Static Memory Controller (SMC): SRAM, NOR, NAND support. NAND Flash controller with 4 Kbytes RAM buffer and ECC The NAND Flash Controller embeds 4224 bytes of internal SRAM. If the NAND Flash controller is not used, these 4224 bytes of SRAM can be used as general purpose. It can be seen at address 0x2010 0000. Кто нибудь умеет задействовать эти 4кила озу? поделитесь примером *.icf плиз!
  9. to codier: спасибо про настройки дма - это я вроде правильно делаю - запись то идет по CMD24 или по CMD25 (но после каждого блока если слать CMD12). to prgjz: в принципе мне только поблочная запись и нужна, читать можно и медленно. Пример вы имеетие ввиду который? Который китаец пишет на основе lpc177x_8x_mci.c? Так там в "мегафункции" int32_t MCI_Cmd_WriteBlock(uint32_t blockNum, uint32_t numOfBlock) параметр numOfBlock не используется :)
  10. Народ, кто нибудь делал на филипсах поблочную запись на SD карту. Уже неделю бьюсь, но не работает. Документация у филипков восхитительная - просто названия флагов написаны!!! Хочу сделать поблочную запись как у SAM3U: посылаем на крату CMD13 и CMD25, а потом настраиваем ДМА на записываемый блок данных и ждем в прерывании окончания передачи (DataBlockEnd). Потом натсраиваем ДМА на следующий блок и т.д. пока не подадим CMD12. Такой код работает собственно в SAM3U. Добиться подобного на LPC1788 не могу! Все работает до первого попадания в регистре статуса флага TxFifoEmpty. Причем, если отладчиком "вставать" в коде в этом месте, то передача продолжается нормально... Такое чувство что когда встаешь отладчиком, то какието флаги успевают отработать как положено... Может кто то подсказать по флагам филиповским что то конкретное при последовательной поблочной записи???
  11. Аналогично BATу, словил зависание процесса. Вставал высокоприоритетный процесс опроса клавиатуры - когда начиналась в низкоприоритетном процессе активная передача инфы по USART с использованием прерываний (причем сама передача в фоне в задаче, прием коротких команд на чтение данных только в прерывании)! На cortex m3 от атмела sam3u4. Можно сказать "по совету" dxp поигрался с приоритетом прерывания usart-а, выставил ему минимальный приоритет 15-й. И, тьфу тьфу, о чудо - сейчас всё робит! Но в будущих проектах конечно боязно теперь юзать scmRTOS. Как бы и не особо собирался - освоил более менее TNKernel (больше нравится), но факт остается фактом - не у одного меня встают процессы на кортексах на scmRTOS. Похорошему бы перевести проект на TNKernel с изначальными приоритетами прерываний и посмотреть как оно будет. Но проект огромный - времени нет (да и думаю желания у начальства). Вот так вот, может кому поможет - поиграться с приоритетами прерываний.
  12. Господа специалисты по I2S и филипсу - таки помогите добить чтение из ацп ads1274! Прием пошел, но... не могу добиться правильного приема. Насколько понял из описания ацп, он должен на один период сигнала WS (сначала WS=1, а потом WS = 0) выдать по клокам SCK четыре 24х битных значения (все четыре канала включены). Итого 96 бит. Возникает вопрос - как принять эти 96 бит контроллером? Сейчас играюсь с параметрами приемника. На осцилографе на графическом анализаторе вижу картинку похожую на правду. АЦП при WS=1 выдает какието данные - максимум 24 разряда, остальное время нуль. Я расчитывал настроить I2S приемник таким образом, чтобы он выдавал 96 слоков SCK на один период сигнала WS (сначала WS=1, а потом WS = 0). Это достигается, насколько я понял битами ws_halfperiod регистра I2SDAI. Вроде бы получил требуемое. И я ожидал что по этим 96 клокам я приму I2S приемником три 32х разрядных значения (3*32=96)! Но!!! Сколько бы клоков я не устанавливал внутри периодна сигнала WS я по факту принимаю всегда два чередующихся 32х битных значения. Первое - это которое приходит с WS сигнала, когда WS = 1: значение похоже на правду и имеет разрядность 24 бита (последний байт нулевой). И второе значение - всегда ноль - я думаю оно отсчитывается не по клокам сразу же за первым значением, а принимается по переходу сигнала WS с еденицы в нуль, то есть когда WS=0. То есть получается, что I2S приемник контроллера принимает ровно одно 32х битное значание на полупериод сигнала WS, а на остальные клоки что идут далее в этом же периоде забивает! Это правильное поведение I2S приемника, или я гдето чтото не донастроил? Если это правильно поведение, тогда зачем вообще нужен этот ws_halfperiod регистра I2SDAI?
  13. Вот это да! Перебросил PINSEL_ConfigPin(0, 25, 2) на PINSEL_ConfigPin(0, 6, 1) и прием попер!!! Однако. Народ, а ревизию проца я правильно понимаю: ZSD1139E, E - это последняя, третья ревизия?
  14. АЦП ads1274, ноги на проце такие: PINSEL_ConfigPin(0, 25, 2); PINSEL_ConfigPin(0, 23, 2); PINSEL_ConfigPin(0, 24, 2); АЦП здесь непричем: "Хотя на осцилограмме сигнал не нулевой и для "правого" и для "левого" канала." Т.е. сигнал на SD болтается и никак не нулевой...
  15. Народ, спецы по I2S, подскажите как жить! Пытаюсь сделать чтение из АЦП по I2S на LPC1788. Всякие настройки уже покрутил - в итоге есть "правильная" картинка на логическом анализаторе: все три сигнала есть SCK, WS, SD. Вродебы и код написан правильно - попадаю в прерывание. Но читаются почемуто одни только нули! Хотя на осцилограмме сигнал не нулевой и для "правого" и для "левого" канала. Даже чтение через ДМА вроде как прикрутил - в прерывание от окончания чтения попадаю, но опять же одни нули. Настраивал один только приемник, может с передатчиком чегото надо покрутить еще? Вот код инициализации: I2S_Init(LPC_I2S); I2S_CFG_Type I2S_ConfigStruct; I2S_ConfigStruct.wordwidth = I2S_WORDWIDTH_8; I2S_ConfigStruct.mono = I2S_MONO; I2S_ConfigStruct.stop = I2S_STOP_DISABLE; I2S_ConfigStruct.reset = I2S_STOP_DISABLE; I2S_ConfigStruct.ws_sel = I2S_MASTER_MODE;//I2S_MASTER_MODE; I2S_ConfigStruct.mute = I2S_MUTE_DISABLE; I2S_ConfigStruct.ws_halfperiod = 0;//32;//24 * 4; I2S_Config(LPC_I2S, I2S_RX_MODE, &I2S_ConfigStruct); I2S_MODEConf_Type I2S_ClkConfig; I2S_ClkConfig.clksel = I2S_CLKSEL_FRDCLK; I2S_ClkConfig.fpin = I2S_4PIN_DISABLE; I2S_ClkConfig.mcena = I2S_MCLK_DISABLE; I2S_ModeConfig(LPC_I2S, &I2S_ClkConfig, I2S_RX_MODE); I2S_FreqConfig(LPC_I2S, SCLK_FREQUENCY_2560, I2S_RX_MODE); I2S_Stop(LPC_I2S, I2S_RX_MODE); IRQ_ConfigureIT(I2S_IRQn, 2); IRQ_EnableIT(I2S_IRQn); I2S_IRQConfig(LPC_I2S, I2S_RX_MODE, 1); I2S_IRQCmd(LPC_I2S, I2S_RX_MODE, ENABLE); I2S_Start(LPC_I2S); Вот код прерывания (не ДМА, его пока отключил): uint32_t RXLevel = 0; //Check RX interrupt if(LPC_I2S->STATE & 0x01) { RXLevel = I2S_GetLevel(LPC_I2S, I2S_RX_MODE); if ((RXLevel != 0) && !I2SRXDone ) { while ( RXLevel > 0 ) { if (I2SReadLength == BUFFER_SIZE) { //Stop RX //I2S_Stop(LPC_I2S, I2S_RX_MODE); // Disable RX //I2S_IRQCmd(LPC_I2S, I2S_RX_MODE, DISABLE); I2SRXDone = 0; I2SReadLength = 0; break; } else { dummy = LPC_I2S->RXFIFO; if (dummy != 0) { asm("nop"); } I2SRXBuffer[i2SReadLength++] = dummy; } RXLevel--; } } }
  16. Извеняюсь, точно - попутал режимы, да. Действительно смотрите "Table 43-11. Sleep mode Current consumption versus Master Clock (MCK) variation". Там черным побелому потребление, и если у вас соответствует таблице, то думаю вопрос о том "кто так много жрет" становится риторическим.
  17. Может вы всетаки пользуете не sleep mode, а wait mode? За ATSAM3S4BA не скажу, но думаю этот камень на SAM3U похож. А в SAM3U в режиме wait mode где то так и потребляет.
  18. Народ, у кого есть сиё чудо - http://www.embeddedartists.com/products/kits/lpc1788_kit.php - поделитесь пожалуйста примером: "FatFs - An example using the FatFs module to access a memory card." Вычитал на буржуйском форуме, что это то - что надо: работа с SD картой по SD интерфейсу через DMA, но немогу найтить в инете. Буду очень признателен!
  19. Однако как говорится "сам дурак". Чтение рулесов и лазание по примерам помогли запустить PG320240WRFH с использованием внутреннего озу: #define C_GLCD_PIX_CLK (6*1000000l) __no_init unsigned char* LCDMemory; extern Int32U SDRAM_VRAM_BASE_ADDR; #define LCD_VRAM_BASE_ADDR ((Int32U)&SDRAM_VRAM_BASE_ADDR) #define LCD_MEMORY_BASE_ADDR ((Int32U)0x20004000) void lcdInit(void) { // Assign pins IOCON_P2_02 = 0x27; IOCON_P2_03 = 0x27; IOCON_P2_04 = 0x27; IOCON_P2_05 = 0x27; IOCON_P2_06 = 0x26; IOCON_P2_07 = 0x26; IOCON_P2_08 = 0x26; IOCON_P2_09 = 0x26; /*Back light enable*/ // FIO2DIR_bit.P2_1 = 1; // FIO2SET = (1<<1); // Init GLCD cotroller PCONP_bit.PCLCD = 1; // enable LCD controller clock CRSR_CTRL_bit.CrsrOn = 0; // Disable cursor LCD_CTRL_bit.LcdEn = 0; // disable GLCD controller LCD_CTRL_bit.LcdBpp= 0; // 1 bpp LCD_CTRL_bit.LcdBW = 1; // LCD_CTRL_bit.LcdMono8 = 0; LCD_CTRL_bit.LcdTFT = 0; // STN panel LCD_CTRL_bit.LcdDual = 0; // single panel LCD_CTRL_bit.BGR = 0; // notmal output LCD_CTRL_bit.BEBO = 0;//1; // little endian byte order LCD_CTRL_bit.BEPO = 1;//1;//0; // little endian pix order LCD_CTRL_bit.LcdPwr= 0; // disable power LCD_CFG_bit.CLKDIV = CLK_GetClock(CLK_PERIPH) / (Int32U)C_GLCD_PIX_CLK; LCD_POL_bit.BCD = 0; // bypass inrenal clk divider LCD_POL_bit.CLKSEL = 0; // clock source for the LCD block is HCLK LCD_POL_bit.IVS = 0; // LCD_FP pin is active HIGH and inactive LOW LCD_POL_bit.IHS = 0; // LCD_LP pin is active HIGH and inactive LOW LCD_POL_bit.IPC = 0;//0; // data is driven out into the LCD on the falling edge LCD_POL_bit.IOE = 0; // active high LCD_POL_bit.CPL = 80-1;//320 - 1;//80 - 1;//320-1; LCD_POL_bit.ACB = 15; LCD_POL_bit.PCD_LO = 2; // init Horizontal Timing LCD_TIMH_bit.HBP = 1;//10;//0x7f;//C_GLCD_H_BACK_PORCH - 1; LCD_TIMH_bit.HFP = 1;//10;//0x7f;//C_GLCD_H_FRONT_PORCH - 1; LCD_TIMH_bit.HSW = 2;//2;//30;//C_GLCD_H_PULSE - 1; LCD_TIMH_bit.PPL = (320/16) - 1; // init Vertical Timing LCD_TIMV_bit.VBP = 1;//C_GLCD_V_BACK_PORCH; LCD_TIMV_bit.VFP = 1;//C_GLCD_V_FRONT_PORCH; LCD_TIMV_bit.VSW = 2;//2;//C_GLCD_V_PULSE; LCD_TIMV_bit.LPP = 240 - 1; // Frame Base Address doubleword aligned //LCD_UPBASE = (unsigned int)SDRAM_BASE_ADDR; LCD_UPBASE = LCD_MEMORY_BASE_ADDR; LCDMemory = (unsigned char*)LCD_MEMORY_BASE_ADDR; memset(LCDMemory, 0, 9600); // unsigned int* pDisplayMemory = (unsigned int*)LCDMemory; unsigned char* pDisplayMemory = LCDMemory; // *pDisplayMemory = 0x80000000; for (unsigned int i = 0; i < 4800; i++) { *pDisplayMemory++ = 0xf0; } for (unsigned int i = 0; i < 4800; i++) { *pDisplayMemory++ = 0x0f; } }
  20. Начал осваивать LPC1788 и хочется использовать простенький монохромный экран 320 на 240. Код с ручным дерганием есть, но хотелось бы аппаратной радости! Буфер для картинки для моего дисплея всего 9600 байт. Внешнее ОЗУ использовать не планируется. На ките взял LCD пример, чтото настроил своего и смотрю ноги на экране - както дергаются, если в LCDUPBASE указан адрес ВНЕШНЕЙ озу. Но если задаю в регистр адрес внутреннего буфера - то нужные ноги не дергаются совсем. Как то можно использовать внутренее озу для LCD драйвера, или это дело заточено под внешнюю SDRAM? Код инициализации примерно такой: #include <nxp/iolpc1788.h> #include "drv_clk.h" #include "arm_comm.h" #include "drv_stn_lcd_1bpp.h" #define C_GLCD_PIX_CLK (6.4MHZ) #define LCD_MEMORY_SIZE (240 * 320 / 8) #pragma data_alignment=8 __no_init unsigned char LCDMemory[LCD_MEMORY_SIZE]; extern Int32U SDRAM_VRAM_BASE_ADDR; #define LCD_VRAM_BASE_ADDR ((Int32U)&SDRAM_VRAM_BASE_ADDR) #define LCD_CURSOR_BASE_ADDR ((Int32U)0x20088800) void lcdInit(void) { // Assign pins IOCON_P2_02 = 0x27; IOCON_P2_03 = 0x27; IOCON_P2_04 = 0x27; IOCON_P2_05 = 0x27; IOCON_P2_06 = 0x26; IOCON_P2_07 = 0x26; IOCON_P2_08 = 0x26; IOCON_P2_09 = 0x26; /*Back light enable*/ // FIO2DIR_bit.P2_1 = 1; // FIO2SET = (1<<1); // Init GLCD cotroller PCONP_bit.PCLCD = 1; // enable LCD controller clock CRSR_CTRL_bit.CrsrOn = 0; // Disable cursor LCD_CTRL_bit.LcdEn = 0; // disable GLCD controller LCD_CTRL_bit.LcdBpp= 0; // 1 bpp LCD_CTRL_bit.LcdBW = 1; // LCD_CTRL_bit.LcdMono8 = 0; LCD_CTRL_bit.LcdTFT = 0; // STN panel LCD_CTRL_bit.LcdDual =0; // single panel LCD_CTRL_bit.BGR = 0; // notmal output LCD_CTRL_bit.BEBO = 0; // little endian byte order LCD_CTRL_bit.BEPO = 0; // little endian pix order LCD_CTRL_bit.LcdPwr= 0; // disable power LCD_CFG_bit.CLKDIV = CLK_GetClock(CLK_PERIPH) / (Int32U)C_GLCD_PIX_CLK; LCD_POL_bit.BCD = 0; // bypass inrenal clk divider LCD_POL_bit.CLKSEL = 0; // clock source for the LCD block is HCLK LCD_POL_bit.IVS = 0; // LCDFP pin is active LOW and inactive HIGH LCD_POL_bit.IHS = 0; // LCDLP pin is active LOW and inactive HIGH LCD_POL_bit.IPC = 0; // data is driven out into the LCD on the falling edge LCD_POL_bit.IOE = 0; // active high LCD_POL_bit.CPL = C_GLCD_H_SIZE-1; // init Horizontal Timing LCD_TIMH_bit.HBP = C_GLCD_H_BACK_PORCH - 1; LCD_TIMH_bit.HFP = C_GLCD_H_FRONT_PORCH - 1; LCD_TIMH_bit.HSW = C_GLCD_H_PULSE - 1; LCD_TIMH_bit.PPL = (C_GLCD_H_SIZE/16) - 1; // init Vertical Timing LCD_TIMV_bit.VBP = C_GLCD_V_BACK_PORCH; LCD_TIMV_bit.VFP = C_GLCD_V_FRONT_PORCH; LCD_TIMV_bit.VSW = C_GLCD_V_PULSE; LCD_TIMV_bit.LPP = C_GLCD_V_SIZE - 1; // Frame Base Address doubleword aligned //LCD_UPBASE = 0x40000000;//LCD_VRAM_BASE_ADDR & ~7UL ; // LCD_LPBASE = LCD_VRAM_BASE_ADDR & ~7UL ; // LCD_UPBASE = 0x40000100; // LCD_LPBASE = 0x40000100; LCD_UPBASE = ((unsigned int)LCDMemory) & ~7UL ; }
  21. Atmel SAM3U4

    Извиняюсь за дурацкий вопрос, все что мне необходимо нашел в других темах!
  22. LPC1788 + ADS1274 = ?

    А на самом деле, насколько я понял, у ADS1274 не SPI формат, а самый что ни на есть I2S. А сий формат аппаратно присутствует у LPC1788. В общем евалюшен кит меня спасет и развеет мои сомнения в этом вопросе.
  23. LPC1788 + ADS1274 = ?

    Народ, кто нибудь делал подобное? Интересует следующее: читать 4х канальное АЦП с интерфейсом SSC через апаратный SSP интерфес филипка! Поясню что имею ввиду. ADS1274 прекрасно читается атмеловским SAM3 через интерфейс SSC: настраивается приемник на 24 бита, настаивается DMA - и процессор не обременен чтением при работе всех 4х каналов АЦП. Встал вопрос перехода на филипок, и соответственно возник вопрос чтения ацп средствами филипского SSP. Существует ли "красивый"(ненапряжный для процессора) способ чтения данного АЦП? Кто нибудь работал с подобной связкой железа?
  24. Atmel SAM3U4

    Народ, кто писал в этой теме по поводу "батарейного отсека" для SAM3U отзовитесь плиз! Напоролись на траблу, что если плата на основе сабжа лежит с неделю на столе без питания, после подачи последнего впадает в ступор! Решили отказаться от литиевой батарейки на ноге VDDBU, а запитать её собственно с VDDIO. Тут другая проблема: теперь плата ресетится долго, порядка 2х секунд, как будто при каждом подключении питания происходит внешний ресет по NRSTB. При наличии же литиевой батарейки плата ресетился по подаче питания очень быстро. Это как то можно забороть? В мануале написано: "VDDBU must be supplied before or at the same time than VDDIO and VDDCORE". Если запитывать VDDBU раньше чем остальные ноги требующие питаня, то получится "быстрый" ресет? Или "медленный старт" - это фича камня, и жизнь прожита зря?