Перейти к содержанию
    

Croman13n3c

Участник
  • Постов

    30
  • Зарегистрирован

  • Посещение

Весь контент Croman13n3c


  1. Как минимум по ним не видно дребезга, или как уже сказал: настолько мал что осцилл не захватил. А вот добавить защиту от дребезга стоит.
  2. От фирмы Nexperia. В даташите указано что по клоку стоит триггер Шмитта, и цитирую даташит:
  3. Добрый день Столкнулся с проблемой переключения выходов Q,Q! в схеме коммутатора питания на D-триггере 74LVC1G74 (см. attach) - смена состояния выходов происходит не только по положительному фронту, но и по спадающему. Грешил на дребезг контактов тактовой кнопки, но посмотрев осциллографом ничего не обнаружил (или импульсы настолько малые что осцилл их не захватил). Возможно кто-нибудь сталкивался с похожей проблемой и подскажет куда копать ?
  4. float RoundPrecision(float value, float precision) { return floorf(value/precision + 0.5f)*precision; } Использование RoundPrecision (100.125f, 0.01f)
  5. Пытаюсь выделить секцию фиксированного размера. Но компилятор выделяет только размер соответствующий, включенных в неё переменных.Пока поставил костыль в виде массива констант включенный в секцию. .conf : AT (0x28000) { . = ALIGN (4); _conf_begin = .; KEEP(*(.conf .conf*)) . = ALIGN(4); _conf_end = .; } >eeprom Регион eeprom - eeprom (rx) : ORIGIN = 0x00028000, LENGTH = 0x00007FFF Компилятор - gcc 4.7.2 , тулчейн yagarto.
  6. Имеем FAT12 : 1. 0 сектор - MBR 2. 1-18 сектора - сам фат и его копия ( по 9 секторов ) 3. 19-32 сектора - корневая директория (14 секторов по 16 директорий) Я так понимаю при записи в файл будут меняться сектора с 1-18, при создании или удалении файлов - 19-32 сектора или ,если файл только 1, будет стираться только 19 сектор ?
  7. Количество перезаписи секторов ограничено. Каждая запись в файловую систему будет сопровождаться перезаписью служебной информации,а это будут одни и теже сектора. А портировать fatfs на serial flash не предаставляет большой сложности: там будут нужны функции инициализации, статуса, записи и чтения сектора.
  8. Находится в startup_LPC17xx.c. Не компилировался и не передавался (упс, еще не собиралась lpc17xxlib), но после исправления лучше не стало - линкер сыплет ошибками linker.txt Является , после перадачи линкеру объектника - он сыплет ошибками (прикрепил отчет выше) #pragma weak Reset_Handler = Default_Reset_Handler void Default_Reset_Handler(void) { /* Initialize data and bss */ unsigned long *pulSrc, *pulDest; /* Copy the data segment initializers from flash to SRAM */ pulSrc = &_sidata; for(pulDest = &_sdata; pulDest < &_edata; ) { *(pulDest++) = *(pulSrc++); } /* Zero fill the bss segment. This is done with inline assembly since this will clear the value of pulDest if it is not kept in a register. */ __asm(" ldr r0, =_sbss\n" " ldr r1, =_ebss\n" " mov r2, #0\n" " .thumb_func\n" "zero_loop:\n" " cmp r0, r1\n" " it lt\n" " strlt r2, [r0], #4\n" " blt zero_loop"); __asm(" ldr r0, =_sbss1\n" " ldr r1, =_ebss1\n" " mov r2, #0\n" " .thumb_func\n" "zero_loop1:\n" " cmp r0, r1\n" " it lt\n" " strlt r2, [r0], #4\n" " blt zero_loop1"); /* Setup the microcontroller system. */ SystemInit(); /* Call the application's entry point.*/ main(); } Не изменило, в файле startup_LPC17xx.c Новый map после добавления добавления недостающих файлов: PIR_NEW.map.txt После последних исправлений добавил заглушки к newlib - сборка завершена успешно. Надо мне внимательней читать выхлоп средств сборки. Спасибо за помощь.
  9. Таблица векторов есть и помещается в isr_vector: __attribute__ ((section(".isr_vector"))) void (* const g_pfnVectors[])(void) = { /*----------Core Exceptions------------------------------------------------ */ (void *)&pulStack[STACK_SIZE-1], /*!< The initial stack pointer */ Reset_Handler, /*!< Reset Handler */ NMI_Handler, /*!< NMI Handler */ HardFault_Handler, /*!< Hard Fault Handler */ MemManage_Handler, /*!< MPU Fault Handler */ BusFault_Handler, /*!< Bus Fault Handler */ UsageFault_Handler, /*!< Usage Fault Handler */ 0,0,0,0, /*!< Reserved */ SVC_Handler, /*!< SVCall Handler */ DebugMon_Handler, /*!< Debug Monitor Handler */ 0, /*!< Reserved */ PendSV_Handler, /*!< PendSV Handler */ SysTick_Handler, /*!< SysTick Handler */ /*----------External Exceptions---------------------------------------------*/ WDT_IRQHandler, /*!< 0: Watchdog Timer */ TIMER0_IRQHandler, /*!< 1: Timer0 */ TIMER1_IRQHandler, /*!< 2: Timer1 */ ...............
  10. Поизучав map файл стало ясно, что он практически все секции исключил из бинарника Discarded input sections .text 0x00000000 0x0 obj/main.o .data 0x00000000 0x1 obj/main.o .bss 0x00000000 0x14 obj/main.o ........... Секция линкер скрипта относящаяся к rom .text : { KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.rodata .rodata* .gnu.linkonce.r.*) } > rom .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > rom __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } > rom __exidx_end = .; .conf : AT (0x28000) { . = ALIGN (4); _conf_begin = .; KEEP(*(.conf .conf*)) . = ALIGN(4); _conf_end = .; } >rom PIR_NEW.map.txt
  11. Стараюсь перенести проект из CoIDE в Eclipse Juno. Заготовку makefile`а взял из scmrtos. Сами объектники компилируются, но не собираются в окончательный бинарник: text data bss dec hex filename 0 0 0 0 0 exe/PIR_NEW.elf Подозреваю ошибку в параметрах линкера, но вот что именно не так - хз. makefile.txt LPC1756.ld.txt
  12. Попытка обойти прерывание с помощью handle SIGTRAP nostop не помогла. ( так же и как monitor reset 0). Судя по гуглу эта ошибка иногда возникает , но вот однозначного решения нету
  13. WDT отключен. Попробовал обойти сигтрап с помощью : handle SIGTRAP nostop noprint nopass. Привело только к смене адреса вылета GDB Hardware Debugger (09.07.12 9:02) (Suspended) Thread [1] (Suspended: Breakpoint hit.) 1 g_pfnVectors() 0x0000003c
  14. Отключив все прерывания ошибка всё равно возникает
  15. Да, прерывания используются вместе с FreeRTOS
  16. При отладке платы (LPC1756 ) в сабже частенько возникает сообщение (как правило после выполнение нескольких инструкций в main ) : No source available for "g_pfnVectors() " , и дебаг дальше не идёт. Лечится отключением питания минут на 10, потом через некоторое время возникает опять. Использую J-link (клон), компилятор - gcc arm embedded (4.6-2012-q2-update ) В гугле ответа не нашел (что печально), кто нибудь сталкивался с такими ошибками и может знает пути решения проблемы ? Стек вызовов: GDB Hardware Debugger (06.07.12 11:14) (Suspended) Thread [1] (Suspended: Signal 'SIGTRAP' received. Description: Trace/breakpoint trap.) 1 g_pfnVectors() 0x00000000 Настройки gdb: monitor speed 300 monitor reg r13 = (0x00000000) monitor reg pc = (0x00000004) break main continue
  17. Спаяв новую плату , всё магическим образом заработало
  18. Проверял, тоже самое. Различие в уровнях может вызывать такое поведение ( на отладочной плате пины с 3,3 В , а питание платки с dataflash 3 В) ? #define LOW 0 #define HI 1 void CS (uint8_t type) { if (type) { GPIO_SetValue(0, (1 << 16)); // Set Value on PIN - port num , pin } else { GPIO_ClearValue(0, (1 << 16)); } }
  19. Функция обмена по SPI была рабочая, проверил на другой плате ( подпаявшись на прямую, достал из загашника ). Чувствую дело в инициализации работы самой памяти. При старте делаю : delay_us(70); //power-up Vcc CS(LOW); delay_ms(20); //delay before write allowed CS(HI); CS как GPIO, остальные как SSP. Используется внутренняя подтяжка.
  20. SSP_ConfigStructInit и SSP_Init стандартные функции из nxp lpx17xx cmsis library. SSP_ConfigStructInit - инициализирует поля структуры настроек SSP значениями по умолчанию. SSP_Init - установка скорости, параметров из DataFlashSSP_CFG, подача питания и тактирования на модуль. P.S 1 ошибка в моем коде - SSP_ConfigStructInit должна находится в начале первого блока с кодом. P.P.S настройка в режим SPI Mode 3 ничего не дала (
  21. LPC1756+AT45DB081D

    Имеем связку из LPC1756 и AT45DB081D через блок SSP в режиме SPI. Пытаюсь считать Manufacturer ID (opcode - 0x9f) По приему в буфеер оказывается значение 0x1E 0x00 0x00 0x00 (должно быть 0x1F 0x25 0x00 0x00). Посмотрев осцилом на линии на первый взгляд всё порядке : cs опущен, тактирование идет, опкод заносится и от at45 приходит 0x1E( вместо ожидаемого). Может кто с таким уже сталкивался , в чём может быть причина такого поведения ? Инициализация SSP в SPI Mode 0 (P0.15,16,17,18 -- CLK,!CS,MISO,MOSI ) DataFlashSSP_CFG.CPHA=SSP_CPHA_FIRST; DataFlashSSP_CFG.CPOL=SSP_CPOL_LO; DataFlashSSP_CFG.ClockRate=1000000; DataFlashSSP_CFG.Mode=SSP_MASTER_MODE; DataFlashSSP_CFG.FrameFormat=SSP_FRAME_SPI; DataFlashSSP_CFG.Databit = SSP_DATABIT_8; SSP_ConfigStructInit(&DataFlashSSP_CFG); SSP_Init(LPC_SSP0, &DataFlashSSP_CFG); CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_SSP0, CLKPWR_PCLKSEL_CCLK_DIV_2); SSP_Cmd(LPC_SSP0, ENABLE); /* ждем пока освободится*/ while( LPC_SSP0->SR & SSP_SR_BSY ) { ; } /* очистка FIFO */ while( LPC_SSP0->SR & SSP_SR_RNE ) { volatile uint32_t dummy = LPC_SSP0->DR; (void)dummy; Чтение Manufacturer ID CS(LOW): delay_us(10); LPC_SSP0->DR = 0x9f; while (LPC_SSP0->SR & SSP_SR_BSY ) { ; } rx_data=LPC_SSP0->DR; for (i=0;i<4;i++) { LPC_SSP0->DR = 0xFF; while (LPC_SSP0->SR & SSP_SR_BSY ) { ; } buf[i] = LPC_SSP0->DR; } CS(HI); delay_ms(1);
  22. UART и ETRX357

    Инициализация uart : //BAUDCTL register ABDEN = 0; WUE = 0; BRG16 = 1; SCKP = 0; RCIDL = 0; ABDOVF = 0; //Baud Rate SPBRG =0x0C; SPBRGH =0; //RCSTA register OERR = 0; FERR = 0; ADDEN = 0; CREN = 1; SPEN = 1; //TXSTA register TRMT = 1; BRGH = 1; SENDB = 0; SYNC = 0; TXEN = 0; TX9 = 0; //Activate pins IO TRISC4=0;//выход (TX) TRISC5=1;//вход (RX) TXEN=1; RCIE=1;//прерывание от RX PEIE=1;//прерывания от переферии GIE=1;//прерывания глобальные } Прием байта : if (RCIF) { InData = RCREG; inBuf[rxWPoint++] = InData; } RCIF=0; Программа по отдельности работает ( проверял из протеуса часть работы с модемом и разбор сообщений от него на отдельной макетке(pic +ftdi на usb)) Но в сборе работает через раз. Fosc = 1 Mhz (встроенный генератор) Baudrate = 19200 Собственно подскажите в какую сторону копать ?
×
×
  • Создать...