[原创] TIVA C launchpad试用心得3.-SP接口读写w25x80Flash

shower.xu   2013-11-16 17:50 楼主
手头有w25x80的IC,是spi接口的flash芯片,很好读写和使用,就连在launchpad的接口上试试

其实只要实现字节的读写就好了,其它的页段操作都是在这上面实现的
源代码在这里
3.rar (738.78 KB)
(下载次数: 7, 2013-11-16 17:52 上传)



  1. //*****************************************************************************
  2. void
  3. SPI1_CSIO_Init(void)
  4. {
  5.     //
  6.     // Enable Peripheral Clocks
  7.     //
  8.     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
  9.     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

  10.     //
  11.     // Enable port PC5 for GPIOOutput
  12.     //
  13.     MAP_GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5);

  14.     //
  15.     // Enable port PD1 for GPIOOutput
  16.     //
  17.     MAP_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1);
  18. }
  19. //*****************************************************************************
  20. void SPI_CS(enum Device tDev)
  21. {
  22.         switch(tDev)
  23.         {
  24.                 case SD:
  25.                                                  FLASH_CS0(0);
  26.                                                  SD_CS0(1);
  27.                          break;
  28.                 case FLASH:
  29.                                                  SD_CS0(0);
  30.                                                  FLASH_CS0(1);
  31.                          break;
  32.                 case VS1003:
  33.                                                  NRF2401_CS0(0);
  34.                                                  VS1003_CS0(1);
  35.                          break;
  36.                 case NRF2401:
  37.                                                  VS1003_CS0(0);
  38.                                                  NRF2401_CS0(1);
  39.                          break;
  40.                 default:break;
  41.         }
  42. }
  43. //*****************************************************************************
  44. void SD_CS(unsigned char id)
  45. {
  46.         SD_CS0(id);
  47. }
  48.         
  49.         
  50.         
  51. //*****************************************************************************
  52. void
  53. SPI0_Prot_Init(void)
  54. {
  55.     //
  56.     // Enable Peripheral Clocks
  57.     //
  58.     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
  59.     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

  60.     //
  61.     // Enable port PA4 for SSI0 SSI0RX
  62.     //
  63.     MAP_GPIOPinConfigure(GPIO_PA4_SSI0RX);
  64.     MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_4);

  65.     //
  66.     // Enable port PA5 for SSI0 SSI0TX
  67.     //
  68.     MAP_GPIOPinConfigure(GPIO_PA5_SSI0TX);
  69.     MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5);

  70.     //
  71.     // Enable port PA2 for SSI0 SSI0CLK
  72.     //
  73.     MAP_GPIOPinConfigure(GPIO_PA2_SSI0CLK);
  74.     MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2);

  75. /*     //
  76.     // Enable port PA3 for SSI0 SSI0FSS
  77.     //
  78.     MAP_GPIOPinConfigure(GPIO_PA3_SSI0FSS);
  79.     MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_3); */
  80. }

  81. //*****************************************************************************
  82. void
  83. SPI1_Port_Init(void)
  84. {
  85.     //
  86.     // Enable Peripheral Clocks
  87.     //
  88.     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
  89.     MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

  90.     //
  91.     // Enable port PD3 for SSI1 SSI1TX
  92.     //
  93.     MAP_GPIOPinConfigure(GPIO_PD3_SSI1TX);
  94.     MAP_GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_3);

  95.     //
  96.     // Enable port PD0 for SSI1 SSI1CLK
  97.     //
  98.     MAP_GPIOPinConfigure(GPIO_PD0_SSI1CLK);
  99.     MAP_GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0);

  100.     //
  101.     // Enable port PD2 for SSI1 SSI1RX
  102.     //
  103.     MAP_GPIOPinConfigure(GPIO_PD2_SSI1RX);
  104.     MAP_GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_2);

  105. /*     //
  106.     // Enable port PD1 for SSI1 SSI1FSS
  107.     //
  108.     MAP_GPIOPinConfigure(GPIO_PD1_SSI1FSS);
  109.     MAP_GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_1); */
  110. }

  111. //*******************************************************************************
  112. void
  113. SPI0_Init(unsigned long ulBitRate)
  114. {
  115.           SPI0_Prot_Init();
  116.     //
  117.     // Configure and enable the SSI port for SPI master mode.  Use SSI0,
  118.     // system clock supply, idle clock level low and active low clock in
  119.     // freescale SPI mode, master mode, 1MHz SSI frequency, and 8-bit data.
  120.     // For SPI mode, you can set the polarity of the SSI clock when the SSI
  121.     // unit is idle.  You can also configure what clock edge you want to
  122.     // capture data on.  Please reference the datasheet for more information on
  123.     // the different SPI modes.
  124.     //
  125.     SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
  126.                        SSI_MODE_MASTER, ulBitRate, 8);

  127.     //
  128.     // Enable the SSI0 module.
  129.     //
  130.     SSIEnable(SSI0_BASE);

  131. }        
  132. //*******************************************************************************
  133. void
  134. SPI1_Init(unsigned long ulBitRate)
  135. {
  136.           SPI1_Port_Init();
  137.     //
  138.     // Configure and enable the SSI port for SPI master mode.  Use SSI1,
  139.     // system clock supply, idle clock level low and active low clock in
  140.     // freescale SPI mode, master mode, 1MHz SSI frequency, and 8-bit data.
  141.     // For SPI mode, you can set the polarity of the SSI clock when the SSI
  142.     // unit is idle.  You can also configure what clock edge you want to
  143.     // capture data on.  Please reference the datasheet for more information on
  144.     // the different SPI modes.
  145.     //
  146.     SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
  147.                        SSI_MODE_MASTER, ulBitRate, 8);

  148.     //
  149.     // Enable the SSI1 module.
  150.     //
  151.     SSIEnable(SSI1_BASE);

  152. }        

  153. //****************************************************************************
  154. void
  155. SPI0_SetSpeed(unsigned char speed)//SPI速度设置
  156. {
  157.     SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
  158.                        SSI_MODE_MASTER, MAXHZ>>speed, 8);
  159.     SSIEnable(SSI0_BASE);                                   
  160. }
  161. //****************************************************************************
  162. void
  163. SPI1_SetSpeed(unsigned char speed)//SPI速度设置
  164. {
  165.     SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
  166.                        SSI_MODE_MASTER, MAXHZ>>speed, 8);
  167.     SSIEnable(SSI1_BASE);                                   
  168. }
  169. //*******************************************************************************
  170. unsigned char
  171. SPI0_ReadWriteByte(unsigned char data)//发送接收一个数据
  172. {
  173.     unsigned long rcvdat;

  174.     ROM_SSIDataPut(SSI0_BASE, data); /* write dummy data */

  175.     ROM_SSIDataGet(SSI0_BASE, &rcvdat); /* read data frm rx fifo */

  176.     return (unsigned char)rcvdat;
  177. }
  178. //*******************************************************************************
  179. unsigned char
  180. SPI1_ReadWriteByte(unsigned char data)//发送接收一个数据
  181. {
  182.     unsigned long rcvdat;

  183.     ROM_SSIDataPut(SSI1_BASE, data); /* write dummy data */

  184.     ROM_SSIDataGet(SSI1_BASE, &rcvdat); /* read data frm rx fifo */

  185.     return (unsigned char)rcvdat;
  186. }

[ 本帖最后由 shower.xu 于 2013-11-16 17:52 编辑 ]

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复