[技术问答] 两个spi冲突

[复制链接]
1439|3
 楼主| 王春炜 发表于 2017-9-4 16:19 | 显示全部楼层 |阅读模式
spi, pd, pc, ck, BLE
芯片是NUC123   用到了SPI0和SPI2,打开SPI2之前,SPI0是正常工作的,打开SPI2后,spi0不能读写,SPI2还没有连接设备,还不知道SPI2是否工作正常
  1. int ddi_spi_Init(void){
  2.         /* Select HCLK as the clock source of SPI0 */
  3.         CLK_SetModuleClock(SPI2_MODULE, CLK_CLKSEL1_SPI2_S_HCLK, MODULE_NoMsk);
  4.         CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_PLL, MODULE_NoMsk);
  5.        
  6.         /* Enable SPI0 peripheral clock */
  7.         CLK_EnableModuleClock(SPI2_MODULE);
  8.         CLK_EnableModuleClock(SPI0_MODULE);
  9.        
  10.        
  11.         /* Configure SPI0 as a slave, clock idle low, 32-bit transaction, drive output on falling clock edge and latch input on rising edge. */
  12.     /* Configure SPI0 as a low level active device. SPI peripheral clock rate is equal to system clock rate. */
  13.     SPI_Open(SPI2, SPI_SLAVE,  SPI_MODE_3, 32, NULL);
  14.         SPI_Open(SPI0, SPI_MASTER, SPI_MODE_3, 8, NULL);
  15.        
  16.         //SPI2->SSR = 0;       
  17.         /* Enable the automatic hardware slave select function. Select the SPI0_SS0 pin and configure as low-active. */
  18.         SPI_EnableAutoSS(SPI2, SPI_SS0, SPI_SS_ACTIVE_LOW);
  19.        
  20.         //SPI2->CNTRL2 |= SPI_CNTRL2_SS_INT_OPT_Msk;
  21.         //SPI2->CNTRL |= SPI_CNTRL_IE_Msk;
  22.         SPI_EnableInt(SPI2, SPI_FIFO_RXOV_INT_MASK|SPI_FIFO_RX_INT_MASK);
  23.        
  24.         /* Enable FIFO mode, set TX FIFO threshold, enable TX FIFO threshold interrupt and RX FIFO time-out interrupt */
  25.         SPI_EnableFIFO(SPI2, 0, 7);
  26.         /*disableAutoss,SSO active low*/
  27.         SPI0->SSR &= ~1<<3;
  28.         SPI0->SSR &= ~1<<2;
  29.         SPI0->SSR |=  1<<4;
  30.        
  31.         SPI_SET_MSB_FIRST(SPI0);
  32.        
  33.         PF3=1;
  34.         SYS->GPF_MFP = ~(SYS_GPF_MFP_PF3_Msk);
  35.         GPIO_SetMode(PF, BIT3, GPIO_PMD_OUTPUT);
  36.         PC4 = 1;
  37.         PC5 = 0;
  38.         SYS->GPC_MFP &= ~(SYS_GPC_MFP_PC4_Msk| SYS_GPC_MFP_PC5_Msk);
  39.         SYS->GPC_MFP |= (SYS_GPC_MFP_PC4_GPIO| SYS_GPC_MFP_PC5_GPIO);
  40.         GPIO_SetMode(PC, BIT4|BIT5, GPIO_PMD_QUASI);
  41.        
  42.         /* Setup SPI0 multi-function pins */
  43.         SYS->GPD_MFP = SYS_GPD_MFP_PD0_SPI2_SS0 | SYS_GPD_MFP_PD1_SPI2_CLK | SYS_GPD_MFP_PD2_SPI2_MISO0 | SYS_GPD_MFP_PD3_SPI2_MOSI0;
  44.         SYS->ALT_MFP1 = SYS_ALT_MFP1_PD0_SPI2_SS0 | SYS_ALT_MFP1_PD1_SPI2_CLK | SYS_ALT_MFP1_PD2_SPI2_MISO0 | SYS_ALT_MFP1_PD3_SPI2_MOSI0;

  45.         SYS->GPC_MFP = SYS_GPC_MFP_PC0_SPI0_SS0 | SYS_GPC_MFP_PC1_SPI0_CLK | SYS_GPC_MFP_PC2_SPI0_MISO0 | SYS_GPC_MFP_PC3_SPI0_MOSI0;
  46.     SYS->ALT_MFP = SYS_ALT_MFP_PC0_SPI0_SS0 | SYS_ALT_MFP_PC1_SPI0_CLK | SYS_ALT_MFP_PC2_SPI0_MISO0 | SYS_ALT_MFP_PC3_SPI0_MOSI0;

  47.         g_spiInBuf.fi = 0;
  48.         g_spiInBuf.fo = 0;

  49.         g_spiOutBuf.fi = 0;
  50.         g_spiOutBuf.fo = 0;       
  51.         spiMasterAcked = 1;
  52.         spiRunning = 0;
  53.         SPI_Close(SPI2);
  54.        
  55.        
  56.         return 0;
  57. }

是哪里出问题了
xixi2017 发表于 2017-9-4 17:19 | 显示全部楼层
不知道啊,如果需要两个设备接,可以搞一个,然后用地址来区分。。
yiy 发表于 2017-9-4 19:32 | 显示全部楼层
你这个是作为主机带两个SPI接口的元件,还是跟单片机通信?
 楼主| 王春炜 发表于 2017-9-5 18:35 | 显示全部楼层
yiy 发表于 2017-9-4 19:32
你这个是作为主机带两个SPI接口的元件,还是跟单片机通信?

问题解决了,自己有的地方写错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部