![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
Пришелец
-
Постов
186 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Пришелец
-
-
насчёт sim300
а никто не сталкивался с проблемой при USSD запросе.
at+cusd=1,"*100#",15
что то у меня он никогда не принимает ответ.
??????????
-
Добрый день! всем.
Может быть кто-нибудь подскажет как реально использовать команду SEARCH ROM (например для термодатчиков DS1890)
Понятно как это работает. Но непонятно как это использовать на практике.
Т.е. как сопоставить найденный мастером датчик реальному (как определить какой он из множества подключенных)
Единственное что приходит в голову - после установке системы бегать по всем датчикам с зажигалкой или отключать их по одному определяя номера датчиков.
Но тогда проще, наверное, заранее считать номера и прописать их при настройке явно.
Тогда вообще зачем команда поиска ПЗУ.
Наверное я что-то не догоняю :unsure:
-
С JTAG работает
но без расставленных точек останова до вызова ф-ции самой загрузки
прерывания так же перестают вызываться если остановить работающий проект в любом месте.
:blink:
-
Оказалось - атмеловский бутлоадер (с сайта) работает :)
только без JTAGа
При запуске его из под отладчика не хотят запускаться прерывания RSпорта и таймера (другими словами все разрешённые)
Иногда наоборот возникают самопроизвольно нерарешённые прерывания :blink: после выполнения segmentinit()
Прерывания разрешаются и в AIC и в самой перефирии
флаг разрешения прерывания в USART установлен флаг приёма байта так же устанавливается при приёме байта а до АIC сигнал не доходит. Без JTAG всё работает.
-
Спасибо - буду разбираться
-
Но ведь он на С ;) Он состоит условно из четырех частей - инициализация периферии, прием по UART, расшифровка и запись во флеш. Первую, вторую и третью надо переписать. К счастью, они составляют примерно 10% от всего проекта. Как пример вполне сойдет.Извините не очень понял - это ведь проект для AVR или не так?
Мне казалось что наоборот вся специфика сосредоточена в записи во flash остальное в принципе у нас будет своё.
брали готовые лоадеры - все они грохаются где-то на REMAPE
-
Опубликовано · Изменено пользователем Пришелец · Пожаловаться
AVR231 - AES bootloader. Не считатая портирования UART останется только заменить spm.h и spm.s90 на прилагаемые и выкинуть запись в eeprom. Вроде больше ничего править там не нужно...А нет чего нибудь попроще. В идеале - ознакомительный пример какой-нибудь примитивный
но рабочий :unsure:
Извините не очень понял - это ведь проект для AVR или не так?
-
Подскажите пожалуйста bootloader для AT91SAM7s256
желательно не встраиваемый в приложение
планируется его переработка - загрузка приложения из внешней DATAFLASH.
Приложение на основе FREERTOS.
U-boot
мне тя жаль, если начнеш его переписывать, он паршиво документирован и через-чур мудренно сконструирован... уже с ним столкнулся...
хотя неофициальная сегодняшняя версия 1.2.0 получше постоена уже...
в ней даже легче чтото искать стало по сравнению с 1.1.6
Посмотрел я и мне то же стало сразу жаль себя - разбраться год наверное в нём надо
а если ещё и адаптировать то вообще можно загнуться. :maniac:
А нет чего нибудь попроще. В идеале - ознакомительный пример какой-нибудь примитивный
но рабочий :unsure:
-
Подскажите пожалуйста bootloader для AT91SAM7s256
желательно не встраиваемый в приложение
планируется его переработка - загрузка приложения из внешней DATAFLASH.
Приложение на основе FREERTOS.
Спасибо всем кто откликнется. :)
-
/* End the interrupt in the AIC. */ AT91C_BASE_AIC->AIC_EOICR = 0;
нужно добавить в конец обработчика
а вообще проще взять целиком пример из исходников FREERTOS - там же ведь он есть
-
Всем спасибо!
Но дело было вот в чём:
AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0,1,13,6);
этой ф-ции в качестве параметра нужен номер канала
а AT91C_PWMC_CHID0 это маска бита данного канала т.е. 1<<0 (настраивался первый канал вместо нулевого)
AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC,0,1,13,6); так всё работает
-
Опубликовано · Изменено пользователем Пришелец · Пожаловаться
Может кто сталкивался - не хочет генерить на ножку - зараза
//* Configure PMC by enabling PWM clock AT91F_PWMC_CfgPMC (); AT91F_PWMC_StopChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0); // AT91C_BASE_PWMC->PWMC_MR = (( 0 << 8 ) | 13); AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0,1,13,6); AT91F_PWMC_StartChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0); Tmp = AT91C_BASE_PWMC->PWMC_ISR; Tmp = Tmp; //* Enabling a PWM output through the PIO AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PA0_PWM0, 0);
-
Проблема оказалась вот в чём:
RTOS компилируется в THUMB инструкциях (в арм почему то не работает - не разбирался)
но прерывания у неё описываются в АРМ инструциях
ф-ция прерывания от таймера была на С соответственно в THUMB
поставил _arm перед объявлением обработчика и всё пошло!!!
-
Опубликовано · Изменено пользователем Пришелец · Пожаловаться
Кажется с этим вопрос решён.
Поставил сброс аппаратный с остановкой после сброса через 1000 мс (в опциях дебагера)
-
Стандартный иаровский проект Free Rtos
- нормально компилируется - запускается и работает во Flash
При Resete его из отладчика (команда меню Reset)
Он переходит опять на вектор сброса и нормално выполняет всё до вызова ф-ции __segment_init
; Initialize segments. ; __segment_init is assumed to use ; instruction set and to be reachable by BL from the ICODE segment ; (it is safest to link them in segment ICODE). ldr r0,=__segment_init mov lr, pc bx r0
при попытке её вызова он оказывается в обработчике прерывания
AT91F_Default_IRQ_handler b AT91F_Default_IRQ_handler
При выходе из отладчика и новой заливке программы нормально работает.
ПРи резете из отладчика опять то же самое.
В чём может быть дело???
При старте кода без отладчика программа работает
-
Вообще странно - никак не хочет работать тот пример иаровский с прерываниями от таймеров, а раньше работал :cranky:
Может ли так погореть ARM ??? :twak:
или это проблема кривых рук :smile3046:
-
AT91C_BASE_AIC->AIC_EOICR = 0; стоит такая штука уже
static void prvSetupHardware( void ) { /* When using the JTAG debugger the hardware is not always initialised to the correct default state. This line just ensures that this does not cause all interrupts to be masked at the start. */ AT91C_BASE_AIC->AIC_EOICR = 0; /* Most setup is performed by the low level init function called from the startup asm file. */ /* Configure the PIO Lines corresponding to LED1 to LED4 to be outputs as well as the UART Tx line. */ AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK | (1<<1) | (1<<27) | (1<<24)); /* Enable the peripheral clock. */ AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ); }
-
Ну вот :(
теперь и иаровский пример с прерываниями от таймеров не работает.
Вообще ничего не понимаю - ничего кажется там не менял. :cranky:
-
да асм обёртка есть :
vTimerISREntry: portSAVE_CONTEXT ; Save the context of the current task. bl timer0_c_irq_handler ; Call the ISR routine. portRESTORE_CONTEXT ; Restore the context of the current task - ; which may be different to the task that ; was interrupted.
вот обработчик на C:
void timer0_c_irq_handler(void) { AT91PS_TC TC_pt = AT91C_BASE_TC0; unsigned int dummy; //* Acknowledge interrupt status dummy = TC_pt->TC_SR; //* Suppress warning variable "dummy" was set but never used dummy = dummy; // count_timer0_interrupt++; //* Read the output state vParTestToggleLED(3); }
Настройка таймера и прерываний:
void soft_uart_ini(void) { unsigned int dummy; portENTER_CRITICAL(); { //* First, enable the clock of the TIMER AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< AT91C_ID_TC0 ); //* Disable the clock and the interrupts AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF; //* Clear status bit dummy = AT91C_BASE_TC0->TC_SR; //* Suppress warning variable "dummy" was set but never used dummy = dummy; //* Set the Mode of the Timer Counter AT91C_BASE_TC0->TC_CMR = 4; //* Enable the clock AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN; AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, vTimerISREntry); AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0); AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; } portEXIT_CRITICAL(); }
Ни светодиодом не моргает ни на точках останова не останавливается.
-
таймер тикает
-
-
Для этой цели ведь используется PIT таймер - он и предназначен специально для этого.
А я говорю про TC0 - это ведь разные вещи ???
-
arm AT91sam7s256 + FREERTOS
Пытаюсь использовать прерывания от таймера 0. - прерывания не возникают :blink:
настраиваю таймер и AIC как в IAR овском примере проекта с прерываниями (который без RTOS на плате работает)
В чём могут быть грабли :unsure: - подскажите кто знает
Заранее спасибо!
-
arm AT91sam7s256 + FREERTOS
Пытаюсь использовать прерывания от таймера 0. - прерывания не возникают. :unsure:
настраиваю таймер и AIC как в IAR овском примере проекта с прерываниями (который без RTOS на плате работает)
В чём могут быть грабли :blink: - подскажите кто знает
Заранее спасибо! :)
Sim300 и +++
в Сотовая связь и ее приложения
Опубликовано · Пожаловаться
модем не всегда реагирует на +++ (переход в AT режим из TCP)
все требования кажется выполняются
паузы с обеих сторон по 0,5 сек плюсы передаются без задержек
версия прошивки 8-ая
Может кто сталкивался?![:help:](https://electronix.ru/forum/uploads/emoticons/help.gif)