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

SGP

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

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

Контакты

  • ICQ
    Array
  1. DMAC + SSP на STR912

    У меня микроконтроллер работал с датчиком, в силу особенностей которого чип-селект формировался программно. По поводу TLV320AIC ничего не могу сказать.
  2. DMAC + SSP на STR912

    У меня DMA и SSP удалось подружить всё работает, единственно что третий канал DMA с прерыванием не удалось подружить. привожу фрагменты кода "как есть". ============================================== последовательность програмироания при инициализации Init_SSP0_fast_DMA() --------------------------------------- SSP0->CR0 = 0xxxxx; // параметры ssp по месту SSP0->CR1 = 0xxx; SSP0->PR = 0xxx; SSP0->IMSCR = 0x04; /* SSP0 Inerrupt enable: RXIM - receive */ SSP0->ICR = 0x00; /* SSP0 Inerrupt clear */ SSP0->DMACR = 0x03; /* SSP0 DMA control - Transmit */ ---------------------------------------------------- SSP0_enable(); ---------------------------------------------------- k = SSP0->DR; /* byte 1 load 8 byte only Read */ k = SSP0->DR; /* byte 2 load 8 byte only Read */ k = SSP0->DR; /* byte 3 load 8 byte only Read */ k = SSP0->DR; /* byte 4 load 8 byte only Read */ k = SSP0->DR; /* byte 5 load 8 byte only Read */ k = SSP0->DR; /* byte 6 load 8 byte only Read */ k = SSP0->DR; /* byte 7 load 8 byte only Read */ k = SSP0->DR; /* byte 8 load 8 byte only Read */ SSP0->ICR = 0x03; // clear IRQ SSP0->CR1 |= 0x02; ---------------------------------------------------- Init_DMA_IRQ (); ---------------------------------------------------- VIC0->VAiR[12] = (unsigned int)DMA_IRQ_Handler; /* Setup DMA IRQ Hndl addr */ VIC0->VCiR[12] |= 12; /* Specify the interrupt number */ VIC0->VCiR[12] |= 0x20; /* Enable the vector interrupt */ VIC0->INTER |= (1<<12); /* Enable SSP0 interrupt */ ---------------------------------------------------- Init_DMA_5_6_7 (); ---------------------------------------------------- DMA->SYNR = 0x00; /* SYNC = 0 enable */ DMA->CNFR = 0x01; /* EN = 1 enable DMA */ /* ------------ INIT DMA CHANEL 5 SPI_0 Resiver ------------------------------------------*/ DMA_Channel5->SRC = 0x4C007008; /* DMA-5 Source Address SSP0_DR */ DMA_Channel5->DES = (u32)(&bufer[3]); /* DMA-5 Destination Address + 4; 4000000 - RAM */ DMA_Channel5->LLI = 0; /* DMA-5 LLI => 0 */ DMA_Channel5->CC = 0xE80003A1; /* interrupt enable, cacheable, bufferable, */ /* INC dst, DWIDTH = 8 bit, SWIDTH = 8 bit, */ /* DBsize = 1 byte, SBsize = 1 byte, N -= 4 ... */ DMA_Channel5->CCNF = 0x00009358; /* interrupt enable, periph-mem DMA, ok */ /* SrcPeriph = SSP_0 RX */ /* ------------ INIT DMA CHANEL 6 SPI_0 Transmit -----------------------------------------*/ DMA_Channel6->SRC = (u32)(&bufer[3]); /* DMA-6 Source Address + 4; 4000000 - RAM */ DMA_Channel6->DES = 0x4C007008; /* DMA-6 Destination Address SSP0_DR */ DMA_Channel6->LLI = 0; /* DMA-6 LLI => Link[0] */ DMA_Channel6->CC = 0xE40003A1; /* interrupt enable, cacheable, bufferable, ok */ /* INC src, DWIDTH = 8 bit, SWIDTH = 8 bit, */ /* DBsize = 1 byte, SBsize = 1 byte, N -= 4 ... */ DMA_Channel6->CCNF = 0x00000B58; /* interrupt disable, mem-periph DMA, not IRQ */ /* DstPeriph = SSP_0 TX N = BAH = 186 - max */ /* ------------ INIT DMA CHANEL 7 Memory to Memory ---------------------------------------*/ DMA_Channel7->SRC = (u32)(&bufer[0]); /* DMA-7 Source Address kadr_bufer - RAM */ DMA_Channel7->DES = (u32)(&e_bufer[0]); /* DMA-7 Destination Address picture_bufer */ DMA_Channel7->LLI = 0; /* DMA-7 LLI => Link[0] */ DMA_Channel7->CC = 0xCC4800E9; /* interrupt enable, INC dst, INC src, */ /* DWIDTH = 32 bit, SWIDTH = 32 bit, */ /* DBsize = 0, SBsize = 0, N = E9 = 233 (*4) */ DMA_Channel7->CCNF = 0x00000084; /* interrupt disable, mem-mem DMA, */ ---------------------------------------------------- Init_DMA_4 (); ---------------------------------------------------- /* ------------ RE_INIT DMA CHANEL 7 Mem to Mem copy -----------------------------------*/ DMA_Channel4->SRC = (u32)(&bufer[0]); /* DMA-7 Source Address bufer - RAM */ DMA_Channel4->DES = (u32)(&e_bufer[0]); /* DMA-7 Destination Address e_bufer */ DMA_Channel4->LLI = 0; /* DMA-7 LLI => Link[0] */ DMA_Channel4->CC = 0xCC4800E9; /* interrupt enable, INC dst, INC src, */ DMA_Channel4->CCNF = 0x00000084; /* interrupt disable, mem-mem DMA, */ ---------------------------------------------------- Enable_DMA (); ---------------------------------------------------- DMA_Channel7->CCNF |= 0x01; /* DMA enable */ ---------------------------------------------------- Chip_SPI_Reset(); и далее по тексту.... ========================================== В самой программе необходимо обеспечить старт а затем всё будет обеспечиваться самим DMA DMA_Channel5->CCNF |= 0x00000001; /* DMA-5 SPI_0 reseive START */ DMA_Channel6->CCNF |= 0x00000001; // ============================================================================ ============================================================================ DMA_IRQ_Handler PUSH {R0-R3,LR} ;-------- control chanel 5 & 6 --------------------- LDR R0,=DMA_BASE ; =DMA_BASE ; MOV R1,#0x00000060 ;-------- Chanel 5 & 6 ----------------------------- STR R1,[R0,#0x08] ; clear Terminal Count Interrupt 5 & 6 ;-------- DMA -------------------------------------- LDR R2,=DMA_CC5_init ; STR R2,[R0,#DMA_CC5] ; DMA_CC5 LDR R2,=DMA_CC6_init ; STR R2,[R0,#DMA_CC6] ; DMA_CC6 MOV R2,#0 ; LLI = 0 STR R2,[R0,#DMA_LLI5] ; LLI5 = 0 STR R2,[R0,#DMA_LLI6] ; LLI6 = 0 ;-------- update kad ------------------------- LDR R2,=kadr_kadr ; Load adres LDRB R3,[R2,#0] ; Load = kad ADD R3,R3,#1 ; AND R3,R3,#mask_DMA_number_kadr ; STRB R3,[R2,#0] ; save new kad ;-------- new adres bufera ------------------------- LDR R1,=kadr_bufer ; Load adres MOV R2,#size_kadr ; size_kad (offset) MLA R2,R2,R3,R1 ; new adres bufera DST ;-------- program DMA_5_6 ------------------------- STR R2,[R0,#DMA_DEST5] ; DMA_DEST5 STR R2,[R0,#DMA_SRC6] ; DMA_SRC6 ;-------- Ready_Date ------------------------------- LDR R1,=Ready_Date ; Load adres LDRB R2,[R1,#0] ; Load = Ready_Date ADD R2,R2,#1 ; STRB R2,[R1,#0] ; Save = Ready_Date CMP R2,#15 ; BHS Konec_DMA ; if BUSY go to ;-------- start DMA_5_6 ---------------------------- LDR R3,[R0,#DMA_CCNF5] ; chanel 5 RX SSP_0 ORR R3,R3,#0x00000001 ; STR R3,[R0,#DMA_CCNF5] ; LDR R3,[R0,#DMA_CCNF6] ; chanel 6 TX SSP_0 ORR R3,R3,#0x00000001 ; STR R3,[R0,#DMA_CCNF6] ; Konec_DMA ;-------- END ------------------------------------ MOV R1,#0 ; STR R1,[R1,#-0xfd0] ; MOV R1,#0 ; MOV R2,#0xfc000000 ; STR R1,[R2,#0x30] ; POP {R0-R3,LR} ; SUBS PC,LR,#4 ;
  3. Проблема с прерываниями Имеется контроллер STR912FW44X6 ревизия D код 610. Одновременно работают таймер TIM3, АЦП и UART1. Таймер и ацп заведены на VIC0, UART1 подключён к VIC1.Обработчики прерываний написаны на С Кеil_3.02. При интенсивном обмене по UART1, на скорости 115200 выкачивается содержимое ОЗУ, происходит вылет программы на нулевой адрес в режиме IRQ. По отдельности всё работает. Перенос UART1 на FIQ нечего не дал. Иследования показали что дело скорее всего в арбитраже между VIC0 и VIC1. Чтото похожее описывается в ерате: "2.1 VIC interrupt controller wrong vector fetch."Хотелось бы услышать мнение общества: кто нибудь сталкивался с подобной проблемой или первопричина в кривизне моей программы.
  4. Проблемка с STR911FM44

    В ревизии D поменяли ID кристалла, проблема описана в ерате. Вам нужно скачать кеил_3.02 или вручную заменить ID в свойствах ULINK.
  5. Ulink нормально работает на 96MHz, единствунный ньюанс, при первом включении компютера не находит его и приходится каждый раз передёргивать USB разьём. Тайминги все стоят по умолчанию я их не трогал. KEIL версии 3.02, с 3.00 будет виснуть.
  6. Я работаю с STR912 но думаю что впечатления будут справедливы и для вашего случая. Общее впечатление об контроллере: периферию делали програмисты, уж очень непривычно (мягко сказано) она выглядит. Кофигурирование портов разбросано по разным местам, но всё вроде работает. UART - FIFO прерывания сделаны криво -послав один байт вы никогда не дождётессь прерывания по передаче, один вектор прерывания на передачу и приём что не совсем удобно. В результате работаю без FIFO это оказалось проще чем дополнительно контролировать длину пакета. PLL работает, нареканий не вызвал. Таймер убогий нет даже автоперезагрузки, что существенно ограничивает его возможности. SPI -вроде бы работает, протестировал не доконца. Общее впечатление - работать можно несмотря на некоторую кособокость. Впечатления о средствах разработки: Кеил не показывает периферию, такое впечатление что лекарство помогает не до конца. Сижу на кейле из за ULINK. Виглер подключить не удалось.
  7. Как прикрутить ULINK от KEIL к IAR

    Купили в конторе старткит для STR912 АРМа от ST. По ряду причин был выбран старткит от Кейла. Начал я его осваивать и столкнулся с таким печальным фактом, что из всей периферии доступна только кнопка "Reset CPU", а значение регистров периферии можно посмотреть только в окошке "Memory", то есть посмотреть можно только работу самого ядра без периферии :-((( Одним словом получается не отладка, а кошмар на улице вязов. Скачал среду от IAR там все эти окошки и менюшки вроде бы есть. Сейчас сижу и думаю как ULINK от KEILL (USB JTAG) прикрутить к среде от IAR. Может кто нибудь сталкивался с такой проблемой, буду очень благодарен если поделитесь опытом. Заранее спасибо всем ответившим.
  8. Спасибо всем ответившим. Мысль про SPI FRAM мне как то в голову не пришла, нужно будет внимательно просмотреть возможность её реализации. Вопрос до кучи, ктонибудь её ещё делает или всего один производитель? "рамтрон" (название пишу по памяти прошу не пинать если ошибся). В сторону DSP от TI я поглядывал, но не хотелось бы из пушки по воробям те более что задача не до конца разложена по полочкам, много еще неясного. По этой причине хочется начать с железа попроще и подоступнее во всех смыслах чтобы обкатать алгоритм на нём ну, а если не хватит производительности тогда придётся браться за тяжёлую артилерию.
  9. Выбор ARM микроконтроллера

    Предвидится новая разработка в которой понадобится мощный микроконтроллер c большой вычислительной мощностью. Сейчас нахожусь в поиске, что выбрать? По многим показателям подходит ARM но в задаче которую необходимо будет решать потребуется ОЗУ около 128к, ПЗУ в районе 64-128к, из внешней периферии нужен будет SPI, UART и желательно DMA. Просмотрел дэйташиты от филипс, TI, Atmel, ST у них максимум ОЗУ 64к, а вешать внешнее ОЗУ не хочется по ряду причин. Может кто нибуть знает что нибудь подходящее, а если имеется старткит или какая нибудь распаяная плата, которую можно купить то будет вообще прекрасно. Всем ответившим большое спасибо.
  10. Хотелось бы узнать поподробнее о работе данного пакета под linux-ом. Под какими версиями будет работать? и какие конкретно программы из пакета? что изменилось по сравнению с предыдущими версиями?
  11. Представим ситуацию когда нужно, по ряду причин оттрасировать по новому печатную плату, скажем для улучшения помехоустойчивости, охлаждения итд. серийного изделия, подвинув некоторые элементы. В этом случае мы встаем перед проблемой: или по новому выпускать схему и сопутствующие ей бумаги (СП, ПЭ3, ...) или иметь анархию при нумерации на печатной плате (как в случае с нумерацией по Э3). IMHO первичной всётаки должна быть нумерация по электрической схеме.
  12. Обычно достаточно иметь 12 вольтовый паяльник и перед тем как брать "камень" в руки "разрядиться" коснувшись рукой чегонибудь заземленного, а также постараться не одевать одежду из синтетики которая сильно электризуется. Из своей практики могу вспомнить случай когда запаяный на плату 430 микроконтроллер был убит упавшим на него сверху ещё теплым листом бумаги с лазерного принтера, перестал генерировать кварцевый генератор, хотя всё остальное было живо :-( имею вот такой печальный опыт.
  13. Попробуйте поставить на свежую винду. У меня было чтото похожее, только программа перестала работать после того как я чтото установил и снёс, установить какая программа повлияла на работоспособность по прошествии времени не удалось . Переустановка программы ни чего не дала. Операционка W2000SP3. Из положения вышел установив программу соседу :-)
  14. Народ !!! подскажите кто знает, как обратиться к битовой структуре из другого файла, а то волшебное слово EXTERN чтото не помогает, а скидывать всё в один файл как то коробит. Пользую IАR 3.21А. Заранее спасибо за ответы.
  15. По поводу ПИКАДА и интерактивной разодки: В самом пикаде 200x разводить - извращение, я пользовался спектрой, благо конвертер у него нормальный. В пикаде раставляете компоненты, а дальше запускаете спектру и вперёд с песнями. Выбираете нужные цепи или одну цепь (подсвечиваются) и запускаете автотрасировку, не понравилось - можно отменить, изменить алгоритм трасировки, подкорректировать или вручную развести, при необходимости можно цепь зафиксировать. Придётся какоето время потратить на изучение всего этого хозяйства и создание библиотек. С другой стороны почему именно Пикад? тем более что в последнее время он фактически не развивается, а все усилия разработчиков направлены в основном на смену форматов файлов которые меняются с каждой новой версией :( - c моей точки зрения пакет неперпективен, а жаль. По моему следует выбирать из трёх нижеприведённых пакетов Wg2004, PADS, cadence(ORCAD). У каждого из этих пакетов есть свои достоинства и недостатки, что выбрать вам решать исходя из ваших условий. Я выбрал ВГ200х и весьма этим доволен. Плюсы: есть руская документация и деморолики почти на все случаи жизни, есть отдельный форум по этому пакету где подскажут; самый лучший трасировщик для ручной и авторазводки. Минусы: не очень удобный рисовальщик (к которому нужно привыкнуть), несколько сложнее в освоении по сравнении с другими пакетами.
×
×
  • Создать...