Advertisement
Guest User

SPI_AFE031

a guest
Jun 14th, 2013
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.94 KB | None | 0 0
  1. /*main.c
  2.  
  3.  Created on: Jun 9, 2013
  4.      Author: Dany
  5.  
  6. Description: Generating a sine output from the DAC and PA of the AFE031
  7. Pinout:
  8.     ADCINA0---RxPGA2_Out
  9.     SPICLK----SCLK
  10.     GPIO6-----SD (Shutdown)
  11.     GPIO12----INT (Interrupt flag)
  12.     GPIO4-----Tx_Flag
  13.     GPIO5-----Rx_Flag
  14.     SPISIMOA--DIN
  15.     SPIDOMIA--DOUT
  16.     SPISTEA---CS (active low)
  17.     GPIO7-----DAC (active high)
  18. */
  19.  
  20. #include <stdio.h>
  21. #include <file.h>
  22.  
  23. #include "DSP28x_Project.h"     // DSP28x Headerfile
  24.  
  25. #include "f2802x_common/include/pll.h"
  26. #include "f2802x_common/include/clk.h"
  27. #include "f2802x_common/include/wdog.h"
  28.  
  29. #include "f2802x_common/include/flash.h"
  30. #include "f2802x_common/include/gpio.h"
  31. #include "f2802x_common/include/pie.h"
  32. #include "f2802x_common/include/adc.h"
  33. #include "f2802x_common/include/sci.h"
  34. #include "f2802x_common/include/sci_io.h"
  35. #include "f2802x_common/include/spi.h"
  36.  
  37. extern void DSP28x_usDelay(Uint32 Count);
  38.  
  39. CPU_Handle myCpu;
  40. PLL_Handle myPll;
  41. WDOG_Handle myWDog;
  42. CLK_Handle myClk;
  43.  
  44. ADC_Handle myAdc;
  45. FLASH_Handle myFlash;
  46. GPIO_Handle myGpio;
  47. PIE_Handle myPie;
  48. SCI_Handle mySci;
  49. SPI_Handle mySpi;
  50.  
  51. void setup_handles(void) {
  52.     myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
  53.     myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
  54.     myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));
  55.     myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
  56.     myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
  57.     myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
  58.     myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
  59.     mySci = SCI_init((void *)SCIA_BASE_ADDR, sizeof(SCI_Obj));
  60.     mySpi = SPI_init((void *)SPIA_BASE_ADDR, sizeof(SPI_Obj));
  61.     myAdc = ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
  62. }
  63.  
  64. void init_system(void) {
  65.     WDOG_disable(myWDog);
  66.     (*Device_cal)();
  67.     CLK_setOscSrc(myClk, CLK_OscSrc_Internal);
  68.     PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);
  69.  
  70.     PIE_disable(myPie);
  71.     PIE_disableAllInts(myPie);
  72.     CPU_disableGlobalInts(myCpu);
  73.     CPU_clearIntFlags(myCpu);
  74. #ifdef _FLASH
  75.     memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
  76. #endif
  77. }
  78.  
  79. void init_scia(void) {
  80.     volatile int status = 0;
  81.     volatile FILE *fid;
  82.     CLK_enableSciaClock(myClk);
  83.  
  84.     // 1 stop bit,  No loopback
  85.     // No parity,8 char bits,
  86.     // async mode, idle-line protocol
  87.     SCI_disableParity(mySci);
  88.     SCI_setNumStopBits(mySci, SCI_NumStopBits_One);
  89.     SCI_setCharLength(mySci, SCI_CharLength_8_Bits);
  90.    
  91.     SCI_enableTx(mySci);
  92.     SCI_enableRx(mySci);
  93.     SCI_enableTxInt(mySci);
  94.     SCI_enableRxInt(mySci);
  95.  
  96.     // SCI BRR = LSPCLK/(SCI BAUDx8) - 1
  97.     // Configured for 115.2kbps
  98. #if (CPU_FRQ_60MHZ)
  99.     SCI_setBaudRate(mySci, SCI_BaudRate_115_2_kBaud);    
  100. #elif (CPU_FRQ_50MHZ)
  101.     SCI_setBaudRate(mySci, (SCI_BaudRate_e)13);
  102. #elif (CPU_FRQ_40MHZ)
  103.     SCI_setBaudRate(mySci, (SCI_BaudRate_e)10);
  104. #endif
  105.  
  106.     SCI_enableFifoEnh(mySci);
  107.     SCI_resetTxFifo(mySci);
  108.     SCI_clearTxFifoInt(mySci);
  109.     SCI_resetChannels(mySci);
  110.     SCI_setTxFifoIntLevel(mySci, SCI_FifoLevel_Empty);
  111.  
  112.     SCI_resetRxFifo(mySci);
  113.     SCI_clearRxFifoInt(mySci);
  114.     SCI_setRxFifoIntLevel(mySci, SCI_FifoLevel_4_Words);
  115.  
  116.     SCI_setPriority(mySci, SCI_Priority_FreeRun);
  117.    
  118.     SCI_enable(mySci);
  119.  
  120.    // Initalize GPIO for USB Communication via Serial
  121.     GPIO_setPullUp(myGpio, GPIO_Number_28, GPIO_PullUp_Enable);
  122.     GPIO_setPullUp(myGpio, GPIO_Number_29, GPIO_PullUp_Disable);
  123.     GPIO_setQualification(myGpio, GPIO_Number_28, GPIO_Qual_ASync);
  124.     GPIO_setMode(myGpio, GPIO_Number_28, GPIO_28_Mode_SCIRXDA);
  125.     GPIO_setMode(myGpio, GPIO_Number_29, GPIO_29_Mode_SCITXDA);
  126.    
  127.     //Redirect STDOUT to SCI
  128.     status = add_device("scia", _SSA, SCI_open, SCI_close, SCI_read, SCI_write, SCI_lseek, SCI_unlink, SCI_rename);
  129.     fid = fopen("scia","w");
  130.     freopen("scia:", "w", stdout);
  131.     setvbuf(stdout, NULL, _IONBF, 0);
  132. }
  133.  
  134. void spi_init(void) {
  135.     CLK_enableSpiaClock(myClk);
  136.  
  137.     // Reset on, rising edge, 16-bit char bits
  138.     SPI_setCharLength(mySpi, SPI_CharLength_16_Bits);
  139.  
  140.     // Enable master mode, delayed phase,
  141.     // enable talk, and SPI int disabled.
  142.     //SPI_setClkPhase(mySpi, SPI_ClkPhase_Delayed);
  143.     //SPI_setClkPolarity(mySpi, SPI_ClkPolarity_OutputFallingEdge_InputRisingEdge);
  144.     SPI_setMode(mySpi, SPI_Mode_Master);
  145.     SPI_enableTx(mySpi);
  146.  
  147.     SPI_setBaudRate(mySpi, SPI_BaudRate_1_MBaud);
  148.  
  149.     // Relinquish SPI from Reset
  150.     SPI_enable(mySpi);
  151.  
  152.     // Set so breakpoints don't disturb xmission
  153.     SPI_setPriority(mySpi, SPI_Priority_FreeRun);
  154. }
  155.  
  156. void spi_fifo_init(void) {
  157.     // Initialize SPI FIFO registers
  158.     SPI_enableChannels(mySpi);
  159.     SPI_enableFifoEnh(mySpi);
  160.     SPI_resetTxFifo(mySpi);
  161.     SPI_clearTxFifoInt(mySpi);
  162.     SPI_resetRxFifo(mySpi);
  163.     SPI_clearRxFifoInt(mySpi);
  164.     SPI_setRxFifoIntLevel(mySpi, SPI_FifoLevel_4_Words);
  165. }
  166.  
  167. void main(void) {
  168.   uint16_t txdata = 0x0040;
  169.   uint16_t rxdata;
  170.  
  171.   setup_handles();
  172.   init_system();
  173.   init_scia();
  174.  
  175.   //Turnoff LEDs
  176.   GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
  177.   GPIO_setMode(myGpio, GPIO_Number_1, GPIO_0_Mode_GeneralPurpose);
  178.   GPIO_setMode(myGpio, GPIO_Number_2, GPIO_0_Mode_GeneralPurpose);
  179.   GPIO_setMode(myGpio, GPIO_Number_3, GPIO_0_Mode_GeneralPurpose);
  180.   GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Output);
  181.   GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Output);
  182.   GPIO_setDirection(myGpio, GPIO_Number_2, GPIO_Direction_Output);
  183.   GPIO_setDirection(myGpio, GPIO_Number_3, GPIO_Direction_Output);
  184.   GPIO_setHigh(myGpio, GPIO_Number_0);
  185.   GPIO_setHigh(myGpio, GPIO_Number_1);
  186.   GPIO_setHigh(myGpio, GPIO_Number_2);
  187.   GPIO_setHigh(myGpio, GPIO_Number_3);
  188.  
  189.   //Disable SD
  190.   /*
  191.   GPIO_setMode(myGpio, GPIO_Number_6, GPIO_6_Mode_GeneralPurpose);
  192.   GPIO_setDirection(myGpio, GPIO_Number_6, GPIO_Direction_Output);
  193.   GPIO_setLow(myGpio, GPIO_Number_6);
  194.   */
  195.  
  196.   //DAC pin
  197.   GPIO_setMode(myGpio, GPIO_Number_7, GPIO_7_Mode_GeneralPurpose);
  198.   GPIO_setDirection(myGpio, GPIO_Number_7, GPIO_Direction_Output);
  199.   GPIO_setLow(myGpio, GPIO_Number_7);
  200.  
  201.   //Configure SPI
  202.   GPIO_setPullUp(myGpio, GPIO_Number_16, GPIO_PullUp_Enable);
  203.   GPIO_setPullUp(myGpio, GPIO_Number_17, GPIO_PullUp_Enable);
  204.   GPIO_setPullUp(myGpio, GPIO_Number_18, GPIO_PullUp_Enable);
  205.   GPIO_setPullUp(myGpio, GPIO_Number_19, GPIO_PullUp_Enable);
  206.   GPIO_setQualification(myGpio, GPIO_Number_16, GPIO_Qual_ASync);
  207.   GPIO_setQualification(myGpio, GPIO_Number_17, GPIO_Qual_ASync);
  208.   GPIO_setQualification(myGpio, GPIO_Number_18, GPIO_Qual_ASync);
  209.   GPIO_setQualification(myGpio, GPIO_Number_19, GPIO_Qual_ASync);
  210.   GPIO_setMode(myGpio, GPIO_Number_16, GPIO_16_Mode_SPISIMOA);
  211.   GPIO_setMode(myGpio, GPIO_Number_17, GPIO_17_Mode_SPISOMIA);
  212.   GPIO_setMode(myGpio, GPIO_Number_18, GPIO_18_Mode_SPICLKA);
  213.   GPIO_setMode(myGpio, GPIO_Number_19, GPIO_19_Mode_SPISTEA_NOT);
  214.  
  215.   spi_init();
  216.   spi_fifo_init();
  217.  
  218.   /*DEBUG
  219.   for(;;){
  220.   SPI_write(mySpi, 0x8B00);
  221.   while(SPI_getRxFifoStatus(mySpi) == SPI_FifoStatus_Empty);
  222.   }
  223.   */
  224.  
  225.   SPI_write(mySpi, 0x8A00);
  226.   //SPI_write(mySpi, 0x8A00);
  227.   while(SPI_getRxFifoStatus(mySpi) == SPI_FifoStatus_Empty);
  228.   rxdata = SPI_read(mySpi);
  229.   printf("DieID: %X\n", rxdata);
  230.  
  231.   //enable PA
  232.   //SPI_write(mySpi, 0x0308);
  233.  
  234.   SPI_write(mySpi, 0x8B00);
  235.   //SPI_write(mySpi, 0x8B00);
  236.   while(SPI_getRxFifoStatus(mySpi) == SPI_FifoStatus_Empty);
  237.   rxdata = SPI_read(mySpi);
  238.   printf("DieRev: %X\n", rxdata);
  239.  
  240.   //set gains
  241.   //SPI_write(mySpi, 0x0200);
  242.  
  243.   //Enable DAC
  244.   SPI_write(mySpi, 0x0127);
  245.   SPI_write(mySpi, 0x0304);
  246.  
  247.   //read enables
  248.   SPI_write(mySpi, 0x8100);
  249.   //SPI_write(mySpi, 0x8100);
  250.   while(SPI_getRxFifoStatus(mySpi) == SPI_FifoStatus_Empty);
  251.   rxdata = SPI_read(mySpi);
  252.   printf("Enables: %X\n", rxdata);
  253.  
  254.   while(SPI_getRxFifoStatus(mySpi) == SPI_FifoStatus_Empty);
  255.   GPIO_setHigh(myGpio, GPIO_Number_7);
  256.   SPI_write(mySpi, txdata);
  257.   //SPI_write(mySpi, 832);
  258.  
  259.   for(;;) {
  260.       long int i;
  261.   }
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement