完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
|
管脚该怎么复用啊,代码里面是这样的 /* Performing the Pin Multiplexing for SPI0. */ SPIPinMuxSetup(0); 求指点 #include #include "soc_C6748.h" #include "hw_psc_C6748.h" #include "lcdkC6748.h" #include "uart.h" #include "spi.h" #include "psc.h" #include "interrupt.h" #include "uartStdio.h" /****************************************************************************** ** INTERNAL MACRO DEFINITIONS *******************************************************************************/ /* value to configure SMIO,SOMI,CLK and CS pin as functional pin */ #define SIMO_SOMI_CLK_CS 0x00000E01 #define CHAR_LENGTH 0x8 /****************************************************************************** ** INTERNAL FUNCTION PROTOTYPES *******************************************************************************/ static void SPIConfigDataFmtReg(unsigned int dataFormat); static void SpiTransfer(void); static void SetUpInt(void); static void SetUpSPI(void); static void GetStatusCommand(void); static void ResetCommand(void); void SPIIsr(void); /****************************************************************************** ** INTERNAL VARIABLE DEFINITIONS *******************************************************************************/ volatile unsigned int flag = 1; unsigned int tx_len; unsigned int rx_len; unsigned char vrf_data[260]; unsigned char tx_data[260]; volatile unsigned char rx_data[260]; unsigned char *p_tx; volatile unsigned char *p_rx; volatile unsigned char StatusResponseMessage[16]; /****************************************************************************** ** INTERNAL FUNCTION DEFINITIONS *******************************************************************************/ int main(void) { /* Waking up the SPI1 instance. */ PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_SPI0, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); /* Initializing the UART instance for serial communication. */ UARTStdioInit(); UARTPuts("Welcome to StarterWare SPI application.rnrn", -1); UARTPuts("Here the SPI controller on the SoC communicates with", -1); UARTPuts(" the Fingerprint Sensor present on the LCDK.rnrn", -1); /* Performing the Pin Multiplexing for SPI0. */ SPIPinMuxSetup(0); /* ** Using the Chip Select(CS) 0 pin of SPI0 to communicate with the Fingerprint Sensor. */ SPI0CSPinMuxSetup(0); /* Enable use of SPI1 interrupts. */ SetUpInt(); /* Configuring and enabling the SPI1 instance. */ SetUpSPI(); /* Issue a Reset to the Fingerprint Sensor */ // ResetCommand(); // UARTPuts("Attempting to Reset the Fingerprint Sensor.rnrn", -1); // // /* Read the Status of the Fingerprint Sensor */ // GetStatusCommand(); // if(StatusResponseMessage[11] == 0x48) // { // UARTPuts("Fingerprint Sensor Successfully Reset.rnrn", -1); // } // else // { // UARTPuts("ERROR: Fingerprint Sensor Reset Attempt Unsuccessful.rnrn", -1); // } tx_data[0] = 0x00; tx_data[1] = 0x01; tx_data[2] = 0x02; tx_data[3] = 0x03; tx_data[4] = 0x04; tx_data[5] = 0x05; tx_data[6] = 0x06; tx_data[7] = 0x07; tx_data[8] = 0x08; tx_data[9] = 0x09; tx_data[10] = 0x0a; tx_data[11] = 0x0b; tx_data[12] = 0x0c; tx_data[13] = 0x0d; tx_data[14] = 0x0e; tx_data[15] = 0x0f; tx_data[16] = 0x10; tx_data[17] = 0x11; tx_data[18] = 0x12; tx_data[19] = 0x13; tx_data[20] = 0x14; tx_data[21] = 0x15; tx_data[22] = 0x16; tx_len = 23; rx_len = 23; for(;;) { SpiTransfer(); // for(; i<100000; i++); } } /* ** Configures ARM interrupt controller to generate SPI interrupt ** */ static void SetUpInt(void) { // Setup the ARM or DSP interrupt controller #ifdef _TMS320C6X // Initialize the DSP interrupt controller IntDSPINTCInit(); // Register the ISR in the vector table IntRegister(C674X_MASK_INT4, SPIIsr); // Map system interrupt to the DSP maskable interrupt IntEventMap(C674X_MASK_INT4, SYS_INT_SPI0_INT); // Enable the DSP maskable interrupt IntEnable(C674X_MASK_INT4); IntEventSet(SYS_INT_SPI0_INT); // Enable DSP interrupts globally IntGlobalEnable(); #else /* Initialize the ARM Interrupt Controller.*/ IntAINTCInit(); /* Register the ISR in the Interrupt Vector Table.*/ IntRegister(SYS_INT_SPINT1, SPIIsr); /* Set the channnel number 2 of AINTC for system interrupt 56. * Channel 2 is mapped to IRQ interrupt of ARM9. */ IntChannelSet(SYS_INT_SPINT1, 2); /* Enable the System Interrupts for AINTC.*/ IntSystemEnable(SYS_INT_SPINT1); /* Enable IRQ in CPSR.*/ IntMasterIRQEnable(); /* Enable the interrupts in GER of AINTC.*/ IntGlobalEnable(); /* Enable the interrupts in HIER of AINTC.*/ IntIRQEnable(); #endif } //** Configures SPI Controller static void SetUpSPI(void) { unsigned char cs = 0x01;//0x04;****************** unsigned char dcs = 0x01;//0x04;****************** unsigned int val = SIMO_SOMI_CLK_CS; SPIReset(SOC_SPI_0_REGS); SPIOutOfReset(SOC_SPI_0_REGS); SPIModeConfigure(SOC_SPI_0_REGS, SPI_MASTER_MODE); SPIClkConfigure(SOC_SPI_0_REGS, 150000000, 1000000, SPI_DATA_FORMAT0);//SCLK原为1M SPIPinControl(SOC_SPI_0_REGS, 0, 0, &val); SPIDefaultCSSet(SOC_SPI_0_REGS, dcs); /* Configures SPI Data Format Register */ SPIConfigDataFmtReg(SPI_DATA_FORMAT0); /* Selects the SPI Data format register to used and Sets CSHOLD * to assert CS pin(line) */ SPIDat1Config(SOC_SPI_0_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs); /* map interrupts to interrupt line INT1 */ SPIIntLevelSet(SOC_SPI_0_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL); /* Enable SPI communication */ SPIEnable(SOC_SPI_0_REGS); } //** Configures Data Format register of SPI static void SPIConfigDataFmtReg(unsigned int dataFormat) { /* Configures the polarity and phase of SPI clock */ SPIConfigClkFormat(SOC_SPI_0_REGS,(SPI_CLK_POL_HIGH | SPI_CLK_INPHASE),dataFormat);//SPI_CLK_POL_HIGH SPI_CLK_OUTOFPHASE //SPIConfigClkFormat(SOC_SPI_0_REGS,(SPI_CLK_POL_LOW | SPI_CLK_INPHASE),dataFormat); /* Configures SPI to transmit MSB bit First during data transfer */ SPIShiftM***First(SOC_SPI_0_REGS, dataFormat); /* Sets the Charcter length */ SPICharLengthSet(SOC_SPI_0_REGS, CHAR_LENGTH, dataFormat); } //** Enables SPI Transmit and Receive interrupt.** Deasserts Chip Select line. static void SpiTransfer(void) { p_tx = &tx_data[0]; p_rx = &rx_data[0]; SPIIntEnable(SOC_SPI_0_REGS, (SPI_RECV_INT | SPI_TRANSMIT_INT)); // while(flag); // flag = 1; /* Deasserts the CS pin(line) */ SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 0x01); } //** Data transmission and receiption SPIIsr void SPIIsr(void) { unsigned int intCode = 0; IntEventClear(SYS_INT_SPI0_INT); intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS); while (intCode) { if(intCode == SPI_TX_BUF_EMPTY) { tx_len--; SPITransmitData1(SOC_SPI_0_REGS, *p_tx); p_tx++; if (!tx_len) { tx_len = 23; SPIIntDisable(SOC_SPI_0_REGS, SPI_TRANSMIT_INT); break; } } if(intCode == SPI_RECV_FULL) { rx_len--; *p_rx = (char)SPIDataReceive(SOC_SPI_0_REGS); p_rx++; if (!rx_len) { flag = 0; SPIIntDisable(SOC_SPI_0_REGS, SPI_RECV_INT); } } intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS); } } |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
基于RK3588J的6路MIPI CSI视频采集案例分享,多路视频系统必看!
1337 浏览 0 评论
622 浏览 0 评论
【创龙科技TL570x-EVM开发板试用体验】 GStreamer 功能测评
8622 浏览 8 评论
【创龙科技TL570x-EVM开发板试用体验】创龙TL5708-EVM开发板入手使用体验评测
6661 浏览 0 评论
【创龙TLZ7x-EasyEVM评估板试用连载】+3.环境搭建vmware+ubuntu详细教程(二)
1414 浏览 0 评论
913浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板及核心板介绍
870浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板--板卡调试软件安装
887浏览 0评论
【创龙科技AM64x开发板试用体验】AM64x开发板开箱测评
879浏览 0评论
求助! 关于使用自制底板插入创龙IMX8MM 核心板无法启动问题
511浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:26 , Processed in 0.645267 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号