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

_TOXA_

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

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

  • Посещение

Репутация

0 Обычный

Информация о _TOXA_

  • Звание
    Участник
    Участник

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Добрый день. На форуме обсуждался вопрос с загрузкой программы из флеши в проц. вот тут: http://electronix.ru/forum/index.php?showtopic=55074. В конце ветки evq123 остаил сообщение: "Написали бутлодер, работает хорошо, весит 4K с копейками, если кому нужно - пишите в личку." Думаю, можно написать в личку и взять у него бутлодер. С помощью него в режиме отладки можно посмотреть как загружаются ваши секции, их размер и првильность загрузки. А также посмотрите и ТО, ЧТО вы загружаете. Тем самым увидите праильность работы утилиты hex55, сранив адреса секции и размер с файлом .map из вашего проекта.
  2. Уважаемый inventor. Пользуюсь CCS v3.3 и частенько приходиться переносить проекты с 3.1 на 3.3 и обратно. Никаких препятствий не встречал. Все работает нормально, компилируется. Единственное, с чем столкнулся, что разные версии DSP/BIOS и пришлось установить еще и старый. Перейти на 3.3 можно. Версия 3.1 почему-то подвисает иногда. Причем слыхал, что это проблема распространенная. Даже где-то на форуме уже обсуждалась по-моему. А ваша ошибка лечится легко: Открываете свой проект в CCS. Открываете свой конфигурационный файл *.tcf из папки DSP/BIOS Config. Появляется окошко с настройкой конфигурации. Ищите в System-> MEM -> SARAM. по последнему правой кнопкой кликаете. Появится меню. Выбираете Properties. Ставите галочки в "create a heap in this memory", указываете размер этой выделяемой памяти, еще галочку "enter a user defined heap...", в поле "Heap label" пишете "My_heap". ОК. Затем правой кнопкой по MEM, в меню выбираете properties. Тут в закладке General в самой нижней строке "Segment For malloc() / free():" выбираете SARAM ( или ту память, где создали heap). ОК. Компилируете и... будет вам счастье. Либо второй путь: убрать вообще выделение области памяти heap. Но!!! могут быть проблемы в проекте.
  3. Спасибо. Заинтересовало. Обязательно почитаю про это дело. Тем более, что есть такая необходимость в использовании флеши.
  4. В документации на SiLabs С8051F342 написано, что регистр RSTSRC содержит биты, отвечающие за источники последнего reset'a (Reset source). А именно 3-ий бит WDTRSF: Watchdog Timer Reset Flag. 0: Source of last reset was not a WDT timeo 1: Source of last reset was a WDT timeout. Я так понимаю, что после reset'a при возвращении в программу можно проверить данный бит и убедиться в в совей правоте. Но тут появляется еще одна проблема, что при первом запуске проги (после прошивки ее в память контроллера) данный бит уже установлен в 1. И после срабатывания reset'a при возвращении в прогу данный бит опять 1. Что еще удивительнее, все биты данного регистра установлены в 1. Че это за глюк? может кто знает, как с этим бороться. Стоит задача, чтобы после reset'a контроллер посылал уведомление другому о своем перезапуске. Но только при перезагрузке от WDT. Заранее спасибо.
  5. Мы тут провели слабенький эксперимент, 1-ваттной радиостанцией попробовали поводить около контроллеров. Все было нормально. Но думаю, малая мощность просто. Вобщем, если вы получите какие-нибудь результаты, если не трудно, сообщите.
  6. Про автошутдаун не знал. Спасибо, счас почитаю. Про данную проблему читал на форуме Silabs. http://silabs.ru/forum/index.php?showtopic=171. Сейчас проект еще на той стадии, когда можно внести без особых проблем корректировки, поэтому хотелось бы учесть как можно больше нюансов (все никогда не охватишь). Меня заинтересовала данная проблема и хотелось бы просто знать, что народ считает по этому поводу. И вообще, встречалось ли еще у кого-нибудь такое, и как вы с этим справлялись...
  7. Читал про такую проблему у SiLabs, что в условиях сильной электромагнитной помехи, внутренний WDT может и не справиться (все виснет так надежно, что даже WDT не отзывается и не reset'ит контроллер). В связи с этим предлагается использовать какой-то внешний watchdog timer, который пасажен не на ногу reset'a, а передергивает само питание. Может быть кто-то знает и может подсказать, как это можно реализовать, на каких микросхемах. И вообще, была бы интересна любая информация по этому поводу.Заранее спасибо.
  8. Доброго времени суток! СтоИт задача сконфигурировать EMIF в TMS320VC5509A для работы с внешней SDRAM памятью Micron 48LC8M16A2. Запускаю на выполнение программу, в которой для начала запускается IMIF_Config(), затем (после конфигурирования) запускается тест, в котором по адресам внешней памяти (области CE0..3 c адресами CE0 : origin = 0040000h, length = 03c0000h CE1 : origin = 0400000h, length = 0400000h CE2 : origin = 0800000h, length = 0400000h CE3 : origin = 0c00000h, length = 0400000h) выполняется запись и проверка записанного. При этом в цикле записи программа вешается, а при просмотре ячеек памяти не обнаруживается записанного, из чего можно сделать вывод, что оно туда вообще не пишет. Аппаратных прблем быть не должно, поэтому встает вопрос об ошибках программных. Рабочая частота процессора 168 МГц. Тактовую частоту синхронизации на ноге CLKMEM выставил 1/2 частоты проца. Может быть кто-то конфигурировал EMIF для памяти 128Mbit или что-нибудь может подсказать полезное для его настройки. Ниже приведу мою версию конфигурации. EMIF_Config MyConfig = { EMIF_EGCR_RMK( EMIF_EGCR_MEMFREQ_1BY2X, EMIF_EGCR_WPE_OFF, EMIF_EGCR_MEMCEN_ON, EMIF_EGCR_NOHOLD_NOHOLD ), EMIF_EMIRST_RMK( EMIF_EMIRST_EMIRST_0F( 0xFFFF ) ), // CE0_1, CE0_2, & CE0_3 EMIF_CEx1_RMK( EMIF_CEx1_MTYPE_SDRAM32, EMIF_CEx1_RDSETUP_OF( 15 ), EMIF_CEx1_RDSTROBE_OF( 63 ), EMIF_CEx1_RDHOLD_OF( 3 ) ), EMIF_CEx2_RMK( EMIF_CEx2_RDEXHLD_OF( 1 ), EMIF_CEx2_WREXHLD_OF( 1 ), EMIF_CEx2_WRSETUP_OF( 15 ), EMIF_CEx2_WRSTROBE_OF( 63 ), EMIF_CEx2_WRHOLD_OF( 3 ) ), EMIF_CEx3_RMK( EMIF_CEx3_TIMOUT_OF( 0 ) ), // CE1_1, CE1_2, & CE1_3 EMIF_CEx1_RMK( EMIF_CEx1_MTYPE_SDRAM32, EMIF_CEx1_RDSETUP_OF( 0 ), EMIF_CEx1_RDSTROBE_OF( 14 ), EMIF_CEx1_RDHOLD_OF( 0 ) ), EMIF_CEx2_RMK( EMIF_CEx2_RDEXHLD_OF( 0 ), EMIF_CEx2_WREXHLD_OF( 0 ), EMIF_CEx2_WRSETUP_OF( 0 ), EMIF_CEx2_WRSTROBE_OF( 14 ), EMIF_CEx2_WRHOLD_OF( 0 ) ), EMIF_CEx3_RMK( EMIF_CEx3_TIMOUT_OF( 0 ) ), // CE2_1, CE2_2, & CE2_3 EMIF_CEx1_RMK( EMIF_CEx1_MTYPE_SDRAM32, EMIF_CEx1_RDSETUP_OF( 0 ), EMIF_CEx1_RDSTROBE_OF( 20 ), EMIF_CEx1_RDHOLD_OF( 0 ) ), EMIF_CEx2_RMK( EMIF_CEx2_RDEXHLD_OF( 0 ), EMIF_CEx2_WREXHLD_OF( 0 ), EMIF_CEx2_WRSETUP_OF( 0 ), EMIF_CEx2_WRSTROBE_OF( 20 ), EMIF_CEx2_WRHOLD_OF( 0 ) ), EMIF_CEx3_RMK( EMIF_CEx3_TIMOUT_OF( 0 ) ), // CE3_1, CE3_2, & CE3_3 EMIF_CEx1_RMK( EMIF_CEx1_MTYPE_SDRAM32, EMIF_CEx1_RDSETUP_OF( 0 ), EMIF_CEx1_RDSTROBE_OF( 20 ), EMIF_CEx1_RDHOLD_OF( 0 ) ), EMIF_CEx2_RMK( EMIF_CEx2_RDEXHLD_OF( 0 ), EMIF_CEx2_WREXHLD_OF( 0 ), EMIF_CEx2_WRSETUP_OF( 0 ), EMIF_CEx2_WRSTROBE_OF( 20 ), EMIF_CEx2_WRHOLD_OF( 0 ) ), EMIF_CEx3_RMK( EMIF_CEx3_TIMOUT_OF( 0 ) ), // SDRAM: SDC1, SDPER, INIT, & SDC2 EMIF_SDC1_MK( EMIF_SDC1_TRC_OF( 5 ), EMIF_SDC1_SDSIZE_64M, EMIF_SDC1_SDWID_OFF, EMIF_SDC1_RFEN_ENABLE, EMIF_SDC1_TRCD_OF( 1 ), EMIF_SDC1_TRP_OF( 1 ) ), EMIF_SDPER_RMK( EMIF_SDPER_PERIOD_OF( 0x578 ) ), EMIF_INIT_RMK( EMIF_SDINIT_INIT_OF( 0xFFFF ) ), EMIF_SDC2_RMK( EMIF_SDC2_SDACC_16BITBUS, EMIF_SDC2_TMRD_OF( 1 ), EMIF_SDC2_TRAS_OF( 3 ), EMIF_SDC2_TACTV2ACTV_OF( 5 ) ) };
  9. ICD2 не шьет в PIC16f628A

    Перепаял стабилизатор на новый, думал в нем дело, так новый тож самое выдает. Хотя, если подключать без нагрузки (просто проводками подрубил к источнику и тестером проверил), выдаем на выходе заявленные +5. Мистика, да и только... А как это может быть связано с USB ? Да еще я когда отключаю ICD2 от разрабатываемого устройства, на выходе вдруг 4,6. На входе 5,5. А вообще, у меня уже моя супер простенькая программка заработала. Поменял PIC на другой. А то тот какой-то паленый попался, что ли. Да и стабилизатор пока выкинул( 5.5В допустимо для PICа). Теперь буду двигаться к поставленной задаче, а не искать пути к ее реализации.
  10. ICD2 не шьет в PIC16f628A

    Я его победил. Прошивает. Подключил внешенее питание на Vdd. MCLR, PGC и PGD подсоединил только к ICD 2. Сразу при подключении нашел мой PIC и потом успешно прошивает. Только почему-то ничего не работает, но с этим уже буду разбираться. Там почему-то стабилизатор стал резко выдавать не 5В, а 4,2. Вроде по datasheet там 5 плюс минус надо. Да, вот еще вопрос назрел. Я прошил, а потом что? отсоединяю от программатора, и оно должно работать, или сразу с подсоединенным должно.
  11. ICD2 не шьет в PIC16f628A

    Доброго всем времени суток. Проблема: использую PIC16f628A, в качестве программатора - ICD2. (пробовал ICD2 в режиме debugger там вообще тьма). значит, что и как я делал. 1) написал простенькую прогу (чтобы просто посмотреть, как это дело работает) LIST P=16F628a #include <p16f628a.inc> ;__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC ;---------------------------------------------------------------------------------------------------------------------------- TEMP EQU 21h R0 EQU 20h DEL EQU 25h ;------------ОБЩАЯ ИНИЦИАЛИЗВЦИЯ---------------- MAIN bcf STATUS,RP1 ;bank0 bcf STATUS,RP0 ;ok CLRF PORTA BSF STATUS,RP0 ;Выбор банка 1 MOVLW 0x00 MOVWF TRISA BCF STATUS,RP0 ;Выбор банка 0 ;--------------------- ;инициализация PORTB CLRF PORTB BSF STATUS,RP0 ;Выбор банка 1 MOVLW 0x00 ; <7:0> - выходы MOVWF TRISB ;BSF OPTION_REG,7 ; RBPU ; включили подтягтвающие регистры ; movlw 0x06 ;ustanivka portov v zifrovoe sostoianie ; movwf ADCON ;ok BCF STATUS,RP0 ;Выбор банка 0 BSF PORTB,3 WAIT GOTO WAIT END Слово конфигурации пробовал писать через _Config так оно ругается, пишет, что ранее не было обьявлено там всякие СР и CPD. Ну да ладно, решил это слово в MPLABE сам буду вводить в настройках. 2) подключаю питание на плату. Потом загружаю MPLAB. Потом подключаю в USB ICD2. затем жму connect. Тут начинается. Пишет: "Connecting to MPLAB ICD 2 ...Connected Setting Vdd source to target ICDWarn0020: Invalid target device id (expected=0x83, read=0x0) ... Reading ICD Product ID Running ICD Self Test ...Passed " хотя че та тут прошел.... ну да ладно. 3) выбираю в качестве программера ICD2. Жму очистить память, прочитать память. Пишет "Erasing Target Device... ...Erase Succeeded MPLAB ICD 2 Ready Reading... ICDWarn0038: When using auto-calculate write range, reads cover the entire memory range. Do you wish to continue? ...EEPROM ...Program Memory (0x0 - 0x7FF) . . Config Memory ...User ID Memory ...Read Succeeded MPLAB ICD 2 Ready " 3) жму программить все это дело. программит и пишет: "Programming Target... ...Erasing Part ...Programming EEPROM Memory ...Programming Program Memory (0x0 - 0x7FF) ...Programming User IDs Verifying... ...Program Memory ...EEPROM ...User ID Memory ...Verify Succeeded Programming Configuration Bits .. Config Memory Verifying configuration memory... ...Verify Failed (and stopped) ICD0161: Verify failed (MemType = Config, Address = 0x2007, Expected Val = 0x2129, Val Read = 0x0) ICD0275: Programming failed. MPLAB ICD 2 Ready " Короче, как я понимаю, он прошивает все, а на слове конфигурации при проверке валится. При использовании в режиме debugger так там вообще выдает какие-то ошибки не понятные... Вопрос: может кто подскажет, в чем может быть ошибка (если кто дочитал до конца :) ) Заранее пасиб. P.S. там видел похожую тему, так там никто конкретно ничего и не сказал. Так я решил подробоно написать, свою тему создал.
  12. спасибо за помощь, буду разбираться. Если че, еще тогда спрошу.
  13. Простите, я не совсем еще понимаю, тема для меня новая. Я думал делать так, создаю файл hexconv.cmd, где прописываю к примеру: -boot -v5510:2 -serial8 -b -o abc.bin abc.out затем запускаю утилиту hex55, а она уже создает все необходимое. Так собственно вопрос: в каком loadere это дело(инициализацию переферии) можно сделать? И если не трудно вам, может вы мне скините пример, как "дальше по описанию".
  14. Добрый день! Работаю с DSP TMS320evm5509a. Необходимо: необходимо, как я понимаю, создать boot-table с помощью утилиты hex-conversion таким образом, чтобы все сохранялось во внешней flash. Затем при запуске работы процессора boot-loader загружал все, причем необходимо при загрузке сконфигурировать EMIF (или рабочие регистры процессора), и секцию .text или какую-то ".My_sect" при этом загрузить в SDRAM. В хелпе читал, что так можно сделать, но как именно это сделать не написано, или не понимаю чего. Может кто знает чего - нибудь про это? или хотя бы книгу какую-нибудь, а то в хелпе очень скудненько написано... заранее спасибо.
  15. Добрый день. Может быть поможет, я работаю с DSP TMS320evm5509a. Пишу в CCStudio v.3.3. Для размещения части кода в SDRAM я использовал #pragma CODE_SECTION(in_task, ".MySect"). Где in_task - имя подпрограммы, ".MySect" - секция в .cmd файле. Причем в .cmd файле вручную прописывал SECTIONS { .csldata: > SARAM .MySect: {} > SDRAM } А для размещения какой-то переменной в SDRAM необходимо использовать вместо CODE_SECTION #pragma DATA_SECTION (symbol, "section name") [;]. Например, #pragma DATA_SECTION(bufferB, "my_sect") char bufferB[512]; Только есть одно но! для работы SDRAM необходимо ее сконфигурировать, а точнее настроить регистры процессора для работы с памятью. В моем для связи с памятью служит EMIF шина. Там есть одно НО, если чем-то мой ответ поможет, пишите, расскажу про НО. А так, сам пробовал, все получается. Не знаю, может немного не по теме, но какое название темы, такой и ответ. :laughing:
×
×
  • Создать...