Jump to content

    

sapID

Свой
  • Content Count

    23
  • Joined

  • Last visited

Community Reputation

0 Обычный

About sapID

  • Rank
    Участник
  • Birthday 08/08/1972

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1615 profile views
  1. JetLink9

    Может, в этом дело ? http://www.starterkit.ru/html/index.php?na...24938&num=2 Уважаемые господа, проблему мы выяснили и решили. Все Джетлинк9 проданные до 7 мая требуют перепрошивки. Если вы попытаетесь обновится версией 4.98b и выше, то программатор выйдет из строя. Для устранения данной неприятности, настоятельно рекомендуем вскрыть корпус программатора, открутить плату и выслать ее нам. В ответ мы отправим плату, в которой уже проблема решена. Для пользователей России, наверное, проще отправлять в Ижевск. Для пользователей Украины, отправлять в Киев. Для пользователей РБ - наши сотрудники часто бывают в городе Минске и могут прямо на месте перепрошить плату. Пользователям других стран придется отправлять платы в Киев. Пожалуйста, вложите в отправление информацию о вашем обратном адресе, ФИО и телефоне получателя. Адрес для доставки почтой России: 426033 г.Ижевск ул.Береговая 13-50, Иванченко П.Ю. Адрес для доставки курьерской службой: 426000 г.Ижевск ул.Телегина д,30, Иванченко П.Ю. +79226802173
  2. Есть же оффициальный сайт: https://www.segger.com/jlink-software.html Старые версии: https://www.segger.com/j-link-older-versions.html Рекомендую версию V4.50m - она точно не проверяет на клоны и работает с JetLink9
  3. http://electronix.ru/forum/index.php?showt...mp;#entry149064
  4. Рекомендую покупку у этого товарища производить только лично и только деньги в обмен на плату - никаких предоплат и обещаний на словах.
  5. void Restart(void) { // Аппаратный сброс AT91C_BASE_RSTC->RSTC_RCR |= AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_PASS; // На всякий случай, программный __asm("sub r0, r0,r0;"); __asm("bx r0;"); }
  6. либо AT91C_UDP_ENDBUSRES, либо AT91C_UDP_RXRSM В cfgDescriptor на всякий случай прописать, что устройство умеет WAKEUP
  7. Вот таким кодом я "глушил" Кит до очень маленького потребления. Естественно, после этого разбудить его не удается, поэтому так глубоко усыплять его не стоит. __ramfunc void PowerDownAbsolute(void) { //Flash is in standby mode (__ramfunc) while (1) ; } void PowerDown(void) { // Disable Interrupts AT91F_AIC_DisableIt(AT91C_BASE_AIC, 0xFFFFFFFF ); //Analog-to-Digital Converter de-activated. AT91F_ADC_CfgModeReg(AT91C_BASE_ADC, AT91C_ADC_SLEEP_MODE); //USB transceiver disabled. AT91F_UDP_DisableTransceiver(AT91C_BASE_UDP); //ARM Core in idle mode. AT91F_PMC_CfgSysClkDisableReg(AT91C_BASE_PMC, AT91C_PMC_UDP | AT91C_PMC_PCK | AT91C_PMC_PCK0 | AT91C_PMC_PCK1 | AT91C_PMC_PCK2); // Pull-Up off AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,0xFFFFFFFF); //AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,0); //Tri-state //AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA,0xFFFFFFFF); //AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA,0); // Все на вход //AT91F_PIO_CfgInput(AT91C_BASE_PIOA,0xFFFFFFFF); //All peripheral clocks de-activated. AT91F_PMC_DisablePeriphClock ( AT91C_BASE_PMC, 0xFFFFFFFF ); //MCK @ 500Hz. AT91F_PMC_CfgMCKReg (AT91C_BASE_PMC,AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK_4); while(!(AT91F_PMC_GetStatus(AT91C_BASE_PMC) & AT91C_PMC_MCKRDY)); AT91F_CKGR_CfgPLLReg(AT91C_BASE_CKGR,0); // Disable Main Oscillator AT91F_CKGR_DisableMainOscillator(AT91C_BASE_CKGR); while(!(AT91F_PMC_GetStatus(AT91C_BASE_PMC) & AT91C_PMC_MOSCS)); //Voltage regulator is in Low-power mode. AT91F_VREG_Enable_LowPowerMode(AT91C_BASE_VREG); //ARM Core in idle mode. PowerDownAbsolute(); while (1) ; }
  8. Еще в прерывании стоит считать регистр статуса таймера Код от Atmel для SAM7 (в rm9200, вроде, также): //* Acknowledge interrupt status dummy = AT91C_BASE_TC1->TC_SR; //* Suppress warning variable "dummy" was set but never used dummy = dummy;
  9. Стек ряпается

    Ну типа спасибо :) Поймите правильно, я некоторое представление об отладке программ имею. В моём случае нужен бряк по изменению содержимого памяти. Подскажите лучше, как RDI по такому условию настроить. Типа, всегда пожалуйста :) Про RDI точно не знаю - работаю в режиме J-Link Там в отладке появляется менюшка J-Link -> Watchpoints Дальше все интуитивно понятно, кроме поля Mask - его, обычно, надо ставить 0xFFFFFFFF
  10. Стек ряпается

    Для поиска таких ошибок удобно использовать Hardware Breakpoint (J-Link/MT-Link). Ставишь брык на запись в область памяти и отладка остановится прямо на команде записи. Затем изучаешь Registers/Disassembler
  11. время выполнения инструкции можно посмотреть в бумажке ARM920T Technical Reference Manual Для данного случая (учитывая, что выборка команд из кеша): 00200268 [0xe1510000] cmp r1,r0 1 такт 0020026c [0x32811001] addcc r1,r1,#1 1 такт 00200270 [0x3afffffc] bcc 0x200268 3 такта что дает 5 тактов на 180МГц = 36циклов в сек
  12. Кеши в AT91RM9200

    у атмела есть пример работы AT91RM9200-BasicMmu-ARM1_2-2_0
  13. SAM7Sxx flash write

    AT91F_enable_interrupt и AT91F_disable_interrupt написаны на ассемблере в файле *.s В С они подключаются через extern extern void AT91F_enable_interrupt(void); extern void AT91F_disable_interrupt(void); #define IRQ_MASK 0x00000080 #define FIQ_MASK 0x00000040 #define INTs_MASK (IRQ_MASK | FIQ_MASK) ;--------------------------------------------------- ; \fn extern void AT91F_enable_interrupt(void) ; \brief Enable Core interrupt ;--------------------------------------------------- PUBLIC AT91F_enable_interrupt CODE32 ; Always ARM mode after exeption AT91F_enable_interrupt mrs r0, CPSR bic r0, r0, #INTs_MASK msr CPSR_c, r0 bx lr ;--------------------------------------------------- ; \fn extern void AT91F_disable_interrupt(void) ; \brief Disable Core interrupt ;--------------------------------------------------- PUBLIC AT91F_disable_interrupt CODE32 ; Always ARM mode after exeption AT91F_disable_interrupt mrs r0, CPSR orr r0, r0, #INTs_MASK msr CPSR_c, r0 mrs r0, CPSR ands r0, r0, #INTs_MASK beq AT91F_disable_interrupt bx lr
  14. SAM7Sxx flash write

    Да недосмотрел. Просто, последний раз отлаживался из RAM. Тут надо что-то типа: #define TestAddr 0x0F000 Функция записи должна выполняться из RAM (в даташите это описано). В IAR это прописывается как __ramfunc и сегмент CODE_I должен быть описан в RAM. Во время записи не должны вызываться прерывания, так как их обработчик обычно во FLASH. Ну, и есть отличия в размере страниц для разных процов - в примере прописано для AT91SAM7S64 и AT91SAM7S256. В остальном - все работает. Записывается верхняя часть программы, в конце, если надо, загрузчик на начальных адресах и делается RESET - в конце EFCWrite() есть переход на 0.
  15. На http://electronix.ru/forum/index.php?showtopic=2739&hl=# я уже писал про свой опыт прикручивания IRDA к SAM7: