Hallo,
per SPI Slave DMA kann ich Daten empfangen. Nur wie sieht es aus, mit 
dem zurücksenden?
per DMA werden die Daten in "Rx_Buf" geschrieben. Die Daten in "Tx_Buf" 
sollen gesendet werden.
Hat einer eine Idee?
Viele Grüße,
Markus
| 1 | ISR (PORTA_INT0_vect) // Sync with SS-Pin
 | 
| 2 | {
 | 
| 3 |   DMA.CH0.CTRLA |= (1<<DMA_CH_ENABLE_bp);
 | 
| 4 | }
 | 
| 5 | 
 | 
| 6 | int main(void)
 | 
| 7 | {
 | 
| 8 |   
 | 
| 9 |   // init SPI
 | 
| 10 |   PORTC.DIR = 0x41;
 | 
| 11 |   SPIC.CTRL = (0<<SPI_CLK2X_bp)
 | 
| 12 |             | (1<<SPI_ENABLE_bp)
 | 
| 13 |         | (0<<SPI_DORD_bp)
 | 
| 14 |         | (0<<SPI_MASTER_bp)
 | 
| 15 |         | SPI_MODE_0_gc;
 | 
| 16 |         
 | 
| 17 |   SPIC.INTCTRL = SPI_INTLVL_OFF_gc;
 | 
| 18 |   
 | 
| 19 |   
 | 
| 20 |   // init DMA Controller
 | 
| 21 |   DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_SPIC_gc;
 | 
| 22 |   
 | 
| 23 |   DMA.CH0.TRFCNT = 2048;    // Data length
 | 
| 24 |   DMA.CH0.REPCNT = 0;
 | 
| 25 |   
 | 
| 26 |   DMA.CH0.SRCADDR0  = (((uint16_t) &SPIC.DATA) >> 0*8) & 0xff;
 | 
| 27 |   DMA.CH0.SRCADDR1  = (((uint16_t) &SPIC.DATA) >> 1*8) & 0xFF;
 | 
| 28 |   DMA.CH0.SRCADDR2  = 0;
 | 
| 29 |   
 | 
| 30 |   DMA.CH0.DESTADDR0 = (((uint16_t) Rx_Buf) >> 0*8) & 0xff;
 | 
| 31 |   DMA.CH0.DESTADDR1 = (((uint16_t) Rx_Buf) >> 1*8) & 0xFF;
 | 
| 32 |   DMA.CH0.DESTADDR2 = 0;
 | 
| 33 |   
 | 
| 34 |   
 | 
| 35 |   DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_NONE_gc
 | 
| 36 |                    | DMA_CH_SRCDIR_FIXED_gc
 | 
| 37 |            | DMA_CH_DESTRELOAD_TRANSACTION_gc
 | 
| 38 |            | DMA_CH_DESTDIR_INC_gc;
 | 
| 39 |            
 | 
| 40 |            
 | 
| 41 |   DMA.CH0.CTRLB = DMA_CH_ERRINTLVL_OFF_gc
 | 
| 42 |                 | DMA_CH_TRNINTLVL_HI_gc;
 | 
| 43 |           
 | 
| 44 |           
 | 
| 45 |   DMA.CH0.CTRLA = (1<<DMA_CH_ENABLE_bp)
 | 
| 46 |                 | (0<<DMA_CH_RESET_bp)
 | 
| 47 |           | (0<<DMA_CH_REPEAT_bp)
 | 
| 48 |           | (0<<DMA_CH_TRFREQ_bp)
 | 
| 49 |           | (1<<DMA_CH_SINGLE_bp)
 | 
| 50 |           | DMA_CH_BURSTLEN_1BYTE_gc;
 | 
| 51 |           
 | 
| 52 |           
 | 
| 53 |   
 | 
| 54 |   
 | 
| 55 |   
 | 
| 56 |   DMA.CTRL = (1<<DMA_CH_ENABLE_bp)
 | 
| 57 |            | (0<<DMA_CH_RESET_bp)
 | 
| 58 |        | (0<<DMA_DBUFMODE_gp)
 | 
| 59 |        | (0<<DMA_PRIMODE_gp);
 | 
| 60 |        
 | 
| 61 |   
 | 
| 62 | PORTA.INT0MASK = PIN4_bm;
 | 
| 63 | PORTA.PIN4CTRL = PORT_OPC_WIREDANDPULL_gc | PORT_ISC_FALLING_gc;
 | 
| 64 | PORTA.INTCTRL |= PORT_INT0LVL_HI_gc;
 | 
| 65 | 
 | 
| 66 | PMIC.CTRL |= PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm;    
 | 
| 67 | sei();
 | 
| 68 | 
 | 
| 69 | while(1)
 | 
| 70 |  {
 | 
| 71 |  .......
 | 
| 72 |  }
 | 
| 73 | }
 | 
| 74 | 
 | 
| 75 | ISR( DMA_CH0_vect)
 | 
| 76 | {
 | 
| 77 |   DMA.INTFLAGS |= (1<<DMA_CH0TRNIF_bp);
 | 
| 78 |   //DMA.CH0.CTRLA |= (1<<DMA_CH_ENABLE_bp);
 | 
| 79 |   
 | 
| 80 |   PORTC.OUTTGL = 0x01;
 | 
| 81 | }
 |