dj_miles 0 6 марта, 2015 Опубликовано 6 марта, 2015 · Жалоба Здравствуйте! Ситуация такая: по UART приходит строка длиной 80 байт hfp d ctreyle, ее нужно принять и записать в буфер с последующей обработкой. Для этой задачи решил прикрутить DMA. Возникла такая ситуация: строка записывается только один раз, т.е. первый раз записали и все дальше буфер не обновляется, хотя прерывания от DMA генерируются. Что я не так делаю? Помогите кто чем сможет. Заранее все спос!!!!! Код инициализации: unsigned char buf[100]; U2BRG = 87;//115200 U2STA = 0; U2MODE = 0x00008008; //Enable Uart for 8-bit data no parity, 1 STOP bit U2STASET = 0x00001410; DCH0SSA = (unsigned int) &U2RXREG & 0x1FFFFFFF; // source start address DCH0DSA = (unsigned int) &buf & 0x1FFFFFFF; // destination start address DCH0SSIZ = 1; // source size DCH0DSIZ = 80; // destination size DCH0CSIZ = 1; // cell size //DCH0DAT = '*'; //Последовательность остановки DCH0ECONbits.CHSIRQ = _UART2_RX_VECTOR; // Заполнение буфера по прерывании UART DCH0ECONbits.SIRQEN = 1; // //DCH0ECONbits.PATEN = 1; // Разрешить остановку по детектировании заданной последовательности //DCH0CONbits.CHPATLEN = 0; //Длина последовательности остановки 1 байт DCH0CONbits.CHPRI = 3; // Приоритет канала DCH0CONbits.CHEN = 1; // Включаем канал DMA DCH0INTbits.CHBCIE = 1; // Включить прерывание по приему 80 байт Прерывание: void __ISR(_DMA0_VECTOR, ipl6) __DMA0Interrupt(void) { if(DCH0INTbits.CHBCIF) F_RX = 1; DCH0INTbits.CHBCIF = 0; DCH0INTbits.CHBCIE = 1; if(U2OERR) U2OERR = 0; // Если было переполнение буфера UART DMA0IF = 0; } Обработка в программе, вывод по 485: if(F_RX) { F_RX = 0; DMACON = 0; LED_RED = 1; LED_GRN = 0; TX_UART2(&buf); while (!U2STAbits.TRMT); LED_RED = 0; LED_GRN = 1; DMACON = 0x8000; DCH0CONbits.CHEN = 1; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dj_miles 0 24 марта, 2015 Опубликовано 24 марта, 2015 · Жалоба Народ может кто знает рабочий пример для MX-серии? Перепробовал все примеры из референсов результат тот-же, что делать хз!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
becopt 0 25 марта, 2015 Опубликовано 25 марта, 2015 · Жалоба Воспользуйтесь гармонией. Желательно готовым драйвером для работы с USART и использованием DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dj_miles 0 25 марта, 2015 Опубликовано 25 марта, 2015 · Жалоба Воспользуйтесь гармонией. Желательно готовым драйвером для работы с USART и использованием DMA. Да как то привык уже писать без библиотечных функций. Да и какая разница как писать железка все равно работает одинаково, а писанины будет больше - я так предполагаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться