Guest User

Untitled

a guest
Feb 4th, 2015
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.70 KB | None | 0 0
  1. #include "common.h"
  2. #include "udma.h"
  3. #include "udma_if.h"
  4. #include "hw_mcspi.h"
  5.  
  6.  
  7. #define TIMER_TICK 5000000
  8. static uint32_t interrupt_count;
  9. static uint8_t tx_buffer[TR_BUFF_SIZE];
  10. static uint8_t rx_buffer[TR_BUFF_SIZE];
  11.  
  12. static void interrupt_handler()
  13. {
  14.     uint32_t status = MAP_SPIIntStatus(GSPI_BASE,true);
  15.     interrupt_count++;
  16.     Report("Count: %d\n\r",interrupt_count);
  17.     if(interrupt_count > 100)
  18.     {
  19.         Message("Reached 100 interrupts...\n\r");
  20.         while(1){}
  21.     }
  22.     if(status &  SPI_INT_DMATX)
  23.     {
  24.         Message(" SPI_INT_DMATX\n\r"); 
  25.         MAP_SPIIntClear(GSPI_BASE,SPI_INT_DMATX);
  26.         return;
  27.     }
  28.     if(status & SPI_INT_DMARX)
  29.     {
  30.         Message("SPI_INT_DMARX  \n\r");
  31.         MAP_SPIIntClear(GSPI_BASE,SPI_INT_DMARX);
  32.         return;
  33.     }
  34.     Message("Unkown Interrupt\n\r");
  35. //  Message("int\n\r");
  36. }
  37.  
  38. int main()
  39. {
  40.     interrupt_count = 0;
  41.  
  42.     uint32_t output_count = 0;
  43.     uint32_t sum = 0;
  44.     uint32_t tick_count = 0;
  45.     uint32_t tx_crc = 0;
  46.    
  47.    
  48.     init();
  49.     // initialize buffers with some known value
  50.     memset(tx_buffer,0x55,sizeof(tx_buffer));
  51.     memset(rx_buffer,0x22,sizeof(rx_buffer));
  52.    
  53.     for(int i = 0; i < TR_BUFF_SIZE; i++)
  54.     {
  55.         tx_buffer[i] = 0x20+i;
  56.     }
  57.     // configure SPI
  58.     MAP_SPIReset(GSPI_BASE);
  59.  
  60.     UDMAInit();
  61.  
  62.     MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI),
  63.                      SPI_IF_BIT_RATE,SPI_MODE_SLAVE,SPI_SUB_MODE_0,
  64.                      (SPI_HW_CTRL_CS |
  65.                      SPI_4PIN_MODE |
  66.                      SPI_TURBO_OFF |
  67.                      SPI_CS_ACTIVEHIGH |
  68.                      SPI_WL_8));   
  69.     MAP_SPIIntRegister(GSPI_BASE,interrupt_handler);
  70.  
  71.     SetupTransfer(UDMA_CH30_GSPI_RX,UDMA_MODE_BASIC,TR_BUFF_SIZE,
  72.                 UDMA_SIZE_8,UDMA_ARB_1,
  73.                 (void *)(GSPI_BASE + MCSPI_O_RX0),UDMA_SRC_INC_NONE,
  74.                 rx_buffer,UDMA_DST_INC_8);
  75.  
  76.     SetupTransfer(UDMA_CH31_GSPI_TX,UDMA_MODE_BASIC,TR_BUFF_SIZE,
  77.                 UDMA_SIZE_8,UDMA_ARB_1,
  78.                 tx_buffer,UDMA_SRC_INC_8,
  79.                 (void *)(GSPI_BASE + MCSPI_O_TX0),UDMA_DST_INC_NONE);  
  80.     SPIDmaEnable(GSPI_BASE,SPI_RX_DMA|SPI_TX_DMA);
  81.     //MAP_SPIIntEnable(GSPI_BASE,SPI_INT_DMATX | SPI_INT_DMARX );
  82.     MAP_SPIIntEnable(GSPI_BASE, SPI_INT_DMARX | SPI_INT_DMATX  );
  83.     MAP_SPIEnable(GSPI_BASE);
  84. //  MAP_uDMAIntClear(0xffffffff);
  85. //  MAP_uDMAChannelAssign( UDMA_CH30_GSPI_RX );
  86. //    MAP_uDMAChannelAssign( UDMA_CH31_GSPI_TX);
  87.   //  MAP_uDMAChannelRequest(UDMA_CH30_GSPI_RX);
  88.   //  MAP_uDMAChannelRequest(UDMA_CH31_GSPI_TX);
  89.  
  90.     Message("Enabled SPI Interface in Slave Mode!\n\r");
  91. //  change_seed(456546,35345,345346,3463);
  92. //  tx_crc = fill_buffer(tx_buffer,TR_BUFF_SIZE,"TX");
  93.  
  94.     Message("Starting while...\n\r");
  95.     uint32_t timer = 0;
  96.     while(1)
  97.     {
  98.  
  99.     //  memcpy(tx_buffer,rx_buffer,TR_BUFF_SIZE);
  100.         // here we could also change the tx_buffer
  101.         //  tx_buffer[TR_BUFF_SIZE - 1] = 18;
  102.         // we want to print out the buffer
  103.         // on the slave side after each transfer.
  104.         // As each transfer will cause
  105.         // TR_BUFF_SIZE interrupts, we check if our
  106.         // local counter is less than interrupt_count
  107.         // which is incremeted in the interrupt handler
  108.         sum = 0;
  109.         if(timer > TIMER_TICK)
  110.         {
  111.             Report("Timer Tick %d!\n\r",tick_count);
  112.             tick_count++;
  113.         }
  114.         if((output_count < interrupt_count) || timer > TIMER_TICK)
  115.         {
  116.             for(int i = 0; i < TR_BUFF_SIZE; i++)
  117.             {
  118.                 sum += rx_buffer[i];
  119.             }
  120.             Report("The sum in the Rx buffer is: %d\n\r",sum);
  121.             Report("Checksum Rx buffer is: 0x%02x\n\r",crc(rx_buffer));
  122.             Report("interrupt: %d\n\r",interrupt_count);
  123.             Message("TX-");
  124.             print_buffer(tx_buffer,TR_BUFF_SIZE);
  125.             Message("RX-");
  126.             print_buffer(rx_buffer,TR_BUFF_SIZE);
  127.             output_count++;
  128.         }
  129.         if(timer > TIMER_TICK)
  130.         {
  131.             timer = 0;
  132.         }
  133.         timer++;
  134.     }
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment