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

prm

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

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

  • Посещение

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


  1. Кто еще не совсем в теме ... К эклипсу есть замечательный плагин, позволяющий в пару кликов мышью настроить цветовую схему. Рекомендую всем :) http://eclipsecolorthemes.org/
  2. может тогда причина не в DMA, а в УАРТ? с другой периферией не пробовали?
  3. Понял. Я подобным образом работаю с DS18b20. Вот рабочий кусок кода(лишнее можно выбросить, я подстраховался): USART_Cmd(USART_DS18B20, DISABLE); //USART_DS18B20 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART_DS18B20, &USART_InitStructure); // конфигурирую DMA DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(USART_DS18B20_Rx_DMA_Ch); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART_DS18B20_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)rx_data_buf; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 1000; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(USART_DS18B20_Rx_DMA_Ch, &DMA_InitStructure); DMA_DeInit(USART_DS18B20_Tx_DMA_Ch); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART_DS18B20_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)tx_data_buf; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = cnt; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(USART_DS18B20_Tx_DMA_Ch, &DMA_InitStructure); USART_ClearFlag(USART_DBG,USART_IT_TC); USART_Cmd(USART_DS18B20, ENABLE); USART_DMACmd(USART_DS18B20, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); DMA_ITConfig(USART_DS18B20_Tx_DMA_Ch, DMA_IT_TC | DMA_IT_TE, ENABLE); DMA_ITConfig(USART_DS18B20_Rx_DMA_Ch, DMA_IT_HT | DMA_IT_TC | DMA_IT_TE, DISABLE); // запускаю передачу DMA_Cmd(USART_DS18B20_Rx_DMA_Ch, ENABLE); DMA_Cmd(USART_DS18B20_Tx_DMA_Ch, ENABLE); // засыпаю до завершения передачи USART_Cmd(USART_DS18B20, DISABLE); DMA_Cmd(USART_DS18B20_Rx_DMA_Ch, DISABLE); DMA_Cmd(USART_DS18B20_Tx_DMA_Ch, DISABLE); DMA_ClearITPendingBit(DMA1_IT_GL2); DMA_ClearITPendingBit(DMA1_IT_GL3);
  4. Обычно описанные действия помогают. Может проще использовать DMA в режиме записи по кольцу, организовав тем самым подобие двойного буфера? В своем проекте использую FreeRTOS. Сделал отдельную задачу на прием информации по УАРТ. В обработчике прерывании от DMA в очередь событий (создаю отдельно) помещаю код возникшего события (буфер заполнен на половину, заполнен полностью, ошибка). В задаче приема вызываю xQueueReceive(..., ..., таймаут_ожидания_окончания_передачи). Если событие принято, обрабатываю данные буфера, запоминаю смещение (первая/вторая половина буфера, зависит от кода события). Если событие не принято (xQueueReceive завершилась по таймауту), определяю количество принятых байт с момента возникновения последнего события (знаю смещение в буфере, знаю сколько еще пришло DMA_GetCurrDataCounter(...)) и снова обрабатываю буфер. //============================================================================ /// Задача по приему данных от USART_DBG //============================================================================= void vDebugReceive(void *pvParameters) { const portTickType xTicksToWait = USART_DBG_RX_TIMEOUT_MS / portTICK_RATE_MS; uint8_t event_code; uint16_t last_data_cnt = USART_DBG_RX_BUF_SIZE; uint16_t cnt = 0; uint8_t offset = 0; //вечный цикл for(;;) { // ожидаю прихода события (данные считаны либо таймаут) if( xQueueReceive(dbg_rx_events, &event_code, xTicksToWait) == pdPASS ) { //получил событие switch(event_code) { case DBG_RX_HALF: { // заполнена первая половина приемного буфера for (; offset < (USART_DBG_RX_BUF_SIZE+1)/2; ++offset) xQueueSendToBack(dbg_rx_data, (const void*)&dbg_in_buf[offset],0); last_data_cnt = (USART_DBG_RX_BUF_SIZE+1)/2; break; } case DBG_RX_FULL: { // заполнена вторая половина приемного буфера for (; offset < USART_DBG_RX_BUF_SIZE; ++offset) xQueueSendToBack(dbg_rx_data, (const void*)&dbg_in_buf[offset],0); // смещение на начало буфера offset = 0; last_data_cnt = USART_DBG_RX_BUF_SIZE; break; } case DBG_RX_ERR: { // произошла ошибка при приеме данных. Заново включаем канал DMA DMA_Cmd(USART_DBG_Rx_DMA_Ch, ENABLE); offset = 0; break; } } } else { // проверяю, может пришла часть данных if ( last_data_cnt != DMA_GetCurrDataCounter(USART_DBG_Rx_DMA_Ch)) { // т.к. счетчик в DMA декрементируется, то вычитаем из last_data_cnt cnt = last_data_cnt - DMA_GetCurrDataCounter(USART_DBG_Rx_DMA_Ch); for (; cnt && offset < USART_DBG_RX_BUF_SIZE; ++offset, --cnt) xQueueSendToBack(dbg_rx_data,(const void*)&dbg_in_buf[offset],0); //ОБНУЛЯТЬ offset НЕЛЬЗЯ!!! Должно генерироваться прерывание по заполнению буфера } last_data_cnt = DMA_GetCurrDataCounter(USART_DBG_Rx_DMA_Ch); } } }
  5. PC +/- …

    А под линуксом хот-кеи Eclipse перенастраивали???
  6. Есть проект http://www.versaloon.com, почитав его форум можно найти информацию, как и чем перепрошить ST-Link, чтобы появилась поддержка openocd. Сам не делал, но судя по форуму, у людей все получилось.
  7. Можно начать с изучения имеющегося на рынке оборудования. Почитать руководства по эксплуатации на весовые индикаторы (WE2110, CI-6000, Flintec и др), в них ОЧЕНЬ МНОГО найдете новой и полезной для себя информации. Ну и куда без ГОСТ-ов. Например, "ГОСТ Р 53228 Весы неавтоматического действия". На первое время хватит :)
  8. Для полноты картины... В свое время на просторах интернета нашел файл (см. вложение) с описанием горячих кнопок эклипса. Мне он здорово помог сделать работу с программой еще более удобной.
  9. Использую Eclipse Helios C/C++. Дополнительно устанавливал плагины: ARM eclipse plugin AVR eclipse plugin Для системы контроля версий (Git): EGit eclipse plugin Рекомендую использовать EGit из репозитория(3-я ссылка) Ну и Qt Eclipse Integration for C++ (т.к. большую часть времени пишу проги на Qt) kgp это сборка ARM toolchain от klen, скачать можно отсюда: http://electronix.ru/forum/index.php?showt...st&p=832302 Red Suite особо не ковырял, скачал, поставил, выдрал скрипт линкера для своего проекта, и больше не использовал. Описанная в предыдущем посте связка работает отлично, плюс никаких ограничений. Про отладчики ничего не скажу - самому пользоваться не доводилось.
  10. У самого недавно были подобные вопросы. Тоже с этой же макетки начал кортексы осваивать :) 1. IgorKossak дал вполне хороший ответ. Вот ссылка http://electronix.ru/forum/index.php?showt...st&p=777699 С yagarto работать будет, но на мой взгляд лучше использовать сборки klen-а. Сам использую eclipse helios + ARM плагин + kgp . Из плюсов (а для кого и минусов :))) - не надо вручную править makefile, все настройки осуществляются в эклипсе. 2. Имеются и готовые сборки на основе эклипса. Я рассматривал CodeSourcery и Red Suite 3 (от Code Red). Первая платная, пробных версий не нашел. У второй имеется 90 дневная пробная версия и версия без ограничения использования по времени, но с лимитом на размер генерируемого файла прошивки. Кроме того, Red Suite генерирует файл скрипта для линкера, что очень хорошо при освоении ARM-ов. JTAG-ом пока не пользовался, обычно использую один из UART-ов в качестве отладочного порта.
  11. Похожая тема http://electronix.ru/forum/lofiversion/index.php/t74127.html
  12. Не в бровь, а в глаз!!! Долго искал, как к эклипсу компилятор для АРМ прикрутить, все как-то боком выходило... А здесь все доступно объяснено. СПАСИБО!!! :)
  13. Сам использую эклипс. Очень доволен. Теперь по делу. Для AVR у эклипса есть плагин AVR Eclipse Plugin. Удобная вещь.
  14. А если тупо взять готовый планшет (какой - нибудь из клонов ASUS Eee Pad) и в виде отдельного блочка прикрутить к нему АЦП. Времени съэкомите кучу, да и программу, возможно, портировать не потребуется - есть образцы с виндой на борту.
  15. Можно попробовать заскочить в какую-нибудь лавочку по ремонту сотовых, там с большой вероятностью возьмутся помочь.
  16. Ну вот, началось ... :) Изначально планировалось использовать графический монохромный индикатор. Для задачи отображения значений параметров и примитивной графики хватит "за глаза". Обновление экрана (отображение буфера на реальный индикатор) планируется выполнять в отдельной задаче, частотой обновления можно поиграться, добиться оптимальной. "Высокая абстракция" необходима для разработки и отладки основного функционала ПО на "большой" машине. Вот как-то так :) А за ссылочку спасибо. Сам не нашел (вернее плохо искал).
  17. Компилятор gcc. Индикатор TIC150, разрешение 133x64, МОНОХРОМНЫЙ Идея в следующем. Имеется некоторый объект Display. Для него устанавливается необходимое разрешение, в озу резервируется память необходимого объема. Объект содержит необходимые функции для вывода текста, картинок, рисования фигур. Для вывода изображения необходимо вызвать функцию showData() данного объекта. Конечному пользователю надо задать необходимое разрешение экрана и переписать функцию showData(). Т.о. нет зависимости от конкретной модели индикатора. Перенести на другой компилятор, думаю, тоже не составит сложности.
  18. Да, открытость ПО важный момент. :) Пока тема существует, успел накидать собственную библиотечку. Реализовал рисование основных геометрических фигур (использовал алгоритмы Брезенхэма), сейчас работаю над шрифтами. Еще планирую реализовать что-то типа класса pixmap. Как закончу - могу выложить. Для тестирования накидал модель графического индикатора на Qt.
  19. Доброго времени суток! Для работы с графическим LCD ищу высокоуровневую библиотеку. Основные требования: легко переносимая(AVR/ARM), наличие функций для рисования графических примитивов, вывод текста и т.д. Кто что использует? Поделитесь опытом.
  20. Было бы интересно увидеть пошаговое руководство для сборки тулчайна. Хотя бы краткое на конкретном примере. Думаю, многие бы попробовали повторить, повысив тем самым свой профессиональный уровень.
  21. Выбираем Window->Preferences. Далее General->Workspace устанавливаем галку Save automatically...
  22. плата на 9260

    Тихо и незаметно заработал сайт http://www.siberia-ge.com. Посещая данную ветку форума и не видя обновлений, я уже было подумал, что автор забросил доработку "народной" платы. Случайно зашел на ссылку сайта и был приятно удивлен. Хочется выразить ADIKM огромную благодарность и уважение! :a14: :a14: :a14:
  23. Посмотрите здесь: http://www.hhdsoftware.com/Products/home/usb-monitor.html Сам эту утилиту не пробовал, пробовал другую - free_serial_port_monitor. Утилитка здоровская, не раз уже выручала :) Просмотрел, sergunas уже привел ее.
  24. плата на 9260

    Есть ли каки-нибудь новости по проекту? Как продвигается осваивание тачскрин стекол? Пролейте свет на ход дел, плз.
×
×
  • Создать...