Lmx2315 2 5 декабря, 2015 Опубликовано 5 декабря, 2015 · Жалоба Здравствуйте уважаемые! Есть-ли у кого пример кода на СИ , как сделать UART - TX из SPORTа на BLACKFIN533? Нужно для вывода отладочной информации, всё остальное на нём уже занято. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psL 0 9 декабря, 2015 Опубликовано 9 декабря, 2015 · Жалоба Здравствуйте уважаемые! Есть-ли у кого пример кода на СИ , как сделать UART - TX из SPORTа на BLACKFIN533? Нужно для вывода отладочной информации, всё остальное на нём уже занято. Спасибо! https://ez.analog.com/message/13824#13824 странно, что не в форуме по dsp http://electronix.ru/forum/index.php?showforum=3. это чтобы никто не заметил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 декабря, 2015 Опубликовано 14 декабря, 2015 · Жалоба ..спасибо за участие! з.ы. в приложении вывод по каналу SPORT1 через перывания на UART c 256000 б/с . 1.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 декабря, 2015 Опубликовано 14 декабря, 2015 · Жалоба ..код выше не работает. ---------------------------------------- код ниже - работает по прерывания: SPORT_TX - UART для вывода отладки. //---------------------------------------- // SPORT Transmitter buffer #define TX_BUFFER_SIZE1 512 volatile u8 tx_buffer1[TX_BUFFER_SIZE1]; volatile unsigned int tx_wr_index1=0, tx_rd_index1=0,tx_counter1=0; //------------------------------------------------- void Init_Interrupts(void) { // assign core IDs to interrupts *pSIC_IAR0 = 0xffffffff; *pSIC_IAR1 = 0xfff2ffff;//SPORT1 TX->IVG4 *pSIC_IAR2 = 0xffffffff; ssync(); // assign ISRs to interrupt vectors register_handler( ik_ivg9, SPORT1_TX_ISR); // ssync(); *pSIC_IMASK = (DMA4_IRQ);// DMA4_IRQ - SPORT1_TX_ISR } //------------------------------------------------------------ void init_SPORT1 (unsigned int SPORT1_SCLK) //инициализация канала SPORT0 { short divider; unsigned int SCLK_VALUE=100000000;//клок системной шины *pSPORT1_TCR1 = TFSR | ITFS | ITCLK |TLSBIT; /* TSPEN запишем позже! */ *pSPORT1_TCR2 = 10; /* длина передачи минус 1 */ /* Настраиваем регистр приёма, фаза 0 полярность 0 */ *pSPORT1_RCR1 = RCKFE | RFSR; /* RSPEN запишем позже! */ *pSPORT1_RCR2 = 10; /* 32 - 1; Длина приемника 32 бита - у нас такой АЦП */ /* Расчитаем делитель и запишем его в регистры тактовой частоты приема и передачи */ divider = SCLK_VALUE / (SPORT1_SCLK * 2 - 1); /* Делитель в оба регистра */ *pSPORT1_TCLKDIV = divider; *pSPORT1_RCLKDIV = divider; *pSPORT1_TFSDIV = 0; } //------------------------------------------------------------ EX_INTERRUPT_HANDLER(SPORT1_TX_ISR) { u16 a=0; u16 data; *pDMA4_IRQ_STATUS = DMA_DONE; FLAG_SPORT1_TX=1; if (tx_counter1) { --tx_counter1; data = tx_buffer1[tx_rd_index1++]; a = data<<2; data = (a|(0x01<<10))|0x1; *pSPORT1_TX16 = data; if (tx_rd_index1 == TX_BUFFER_SIZE1) tx_rd_index1=0; } else { *pSIC_IMASK &= ~0x01000; } } //--------------------------------------------------- void SPORT1_enable(void) { *pSIC_IMASK |= 0x01000; ssync(); *pSPORT1_TCR1 |= TSPEN; // Enable SPORT0 Transmitter ssync(); *pSPORT1_RCR1 |= RSPEN; // Enable SPORT0 Transmitter ssync(); } void SPORT1_disable(void) { ssync(); *pSPORT1_TCR1 &= ~(TSPEN); // Enable SPORT0 Transmitter ssync(); *pSPORT1_RCR1 &= ~(RSPEN); // Enable SPORT0 Transmitter ssync(); } u32 SPORT1_write (u16 data) { volatile u32 word; u16 a=0; int temp_IMASK; //Anomali err a = data<<2; data = (a|(0x01<<10))|0x1; SPORT1_enable(); //while(!(*pSPORT1_STAT & TXHRE)); *pSPORT1_TX16 = data; return word; } void put_char1(char c) { // while (tx_counter1 == TX_BUFFER_SIZE1); *pSIC_IMASK &= ~0x01000;//запрещаем прерывание на передачу ssync(); if (tx_counter1||((*pSPORT1_STAT & TXF))) //если буфер не пустой или FIFO забит { tx_buffer1[tx_wr_index1++]=c; if (tx_wr_index1 == TX_BUFFER_SIZE1) tx_wr_index1=0; ++tx_counter1; ssync(); *pSIC_IMASK |= 0x01000;//разрешаем прерывание на передачу ssync(); } else { SPORT1_write ©; } } void put_str1(char *s) { while (*s != 0) put_char1(*s++); } int main(void) { init_SPORT1 (256000)//инициализация канала SPORT1 256000 бит/с Init_Interrupts(); put_str1("Hellow world!\r\n"); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться