网上有很多关于pos机万能驱动下载,PIC32MZ芯片spi驱动开发的知识,也有很多人为大家解答关于pos机万能驱动下载的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!
本文目录一览:
pos机万能驱动下载
最近在项目开发过程中用的了PIC32MZ1024EFE144芯片,其中一个功能是通过SPI接口控制SI4438实现无线通信。具体的调试步骤分享如下。
1、PIC32MZ芯片SPI接口引脚配置
PIC32MZ芯片有6路SPI接口,在项目中使用SPI2。
SPI2的SCK是固定引脚,不可更改;SDI2/SDO2/SS2是通过端口映射来配置。
//SI4438 SPI管脚选择 PLIB_PORTS_PinModePerPortSelect(PORTS_ID_0,PORT_CHANNEL_G,PORTS_BIT_POS_1,PORTS_PIN_MODE_DIGITAL);//SDO2 PLIB_PORTS_PinModePerPortSelect(PORTS_ID_0,PORT_CHANNEL_B,PORTS_BIT_POS_3,PORTS_PIN_MODE_DIGITAL);//SDI2 PLIB_PORTS_PinModePerPortSelect(PORTS_ID_0,PORT_CHANNEL_G,PORTS_BIT_POS_6,PORTS_PIN_MODE_DIGITAL);//SCK2 PLIB_PORTS_ChangeNoticePullUpPerPortEnable( PORTS_ID_0, PORT_CHANNEL_B, PORTS_BIT_POS_3 ); // PLIB_PORTS_RemapOutput(PORTS_ID_0,OTPUT_FUNC_REFCLKO3,OUTPUT_PIN_RPG6); /* PPS Input Remapping */ SDI2R=8;//RPB3 SDI2 /* PPS Output Remapping */ RPG1R = 6;// RPG1 SDO2 PLIB_PORTS_PinDirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_G, PORTS_BIT_POS_1 );//SCK2 PLIB_PORTS_PinDirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_G, PORTS_BIT_POS_6 );//SDO2 PLIB_PORTS_PinSet( PORTS_ID_0, PORT_CHANNEL_B, PORTS_BIT_POS_2 );//SI4438 SS2 PLIB_PORTS_PinDirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_B, PORTS_BIT_POS_2 );// SS2
2、PIC32MZ芯片SPI模块时钟选择
CPU内部任何一个模块都需要时钟才能工作,需要给SPI模块配置时钟源。项目中芯片的系统时钟是120M,使用PBCLK2作为SPI的时钟源。
/* usart、I2C、PMP use clock PBCLK2 set this to sys clk*/ PLIB_OSC_PBClockDivisorSet(OSC_ID_0, OSC_PERIPHERAL_BUS_2, 2 );
SPIxCON: SPI Control Register
3、PIC32MZ芯片SPI模块参数配置
SPI参数初始化比较简单,没有使用中断收发,根据功能寄存器进行参数配置即可。SPI的通信模式需要和SI4438匹配,这个通信模式一定要正确,否则无法通信。
void SPI2_Initialize ( void ){ uint32_t rdata; /* STOP and Reset the SPI */ SPI2CON = 0; /* Clear the Receiver buffer */ rdata = SPI2BUF; rdata = rdata; /* BAUD Rate register Setup */ SPI2BRG = 3; /* CLear the Overflow */ SPI2STATCLR = _SPI2STAT_SPIROV_MASK; /* MSTEN = 1 CKP = 0 CKE = 1 MODE<32,16> = 0 ENHBUF = 1 MSSEN = 0 MCLKSEL = 0 */ SPI2CON=0x8020|SPI_CLOCK_PHASE_LEADING_EDGE|_SPI2CON_ENHBUF_MASK; // SPI ON, 8 bits transfer, SMP=0, Master mode}
4、PIC32MZ芯片SPI模块收发驱动
这里收发函数分开是为了方便阅读,实际上,由于和SI4438进行SPI通信时是半双工,收发完全可以写到一个函数里。
bool SPI2_Write(void* pTransmitData, size_t txSize){ uint32_t i; uint32_t rdata; for( i=0;i<txSize;i++) { SPI2BUF = *((uint8_t*)pTransmitData + i); while((SPI2STAT & _SPI2STAT_SRMT_MASK) == 0); while ((bool)(SPI2STAT & _SPI2STAT_SPIRBE_MASK) == true); rdata = SPI2BUF; }}bool SPI2_Read(void* pReceiveData, size_t rxSize){ uint32_t i; for( i=0;i<rxSize;i++) { SPI2BUF = 0xFF; while((SPI2STAT & _SPI2STAT_SRMT_MASK) == 0); while ((bool)(SPI2STAT & _SPI2STAT_SPIRBE_MASK) == true); *((uint8_t*)pReceiveData+i) = SPI2BUF; }}
总结
在产品开发中,SPI功能用的非常多,逻辑相对简单,虽然每颗芯片的配置都不一样,但是总体上都是要从管脚配置、时钟选择、寄存器初始化、收发驱动这些方面着手。
芯片手册下载地址:
Section 23. Serial Peripheral Interface (SPI):http://ww1.microchip.com/downloads/en/DeviceDoc/61106G.pdf
PIC32MZ EF Family Datasheet_DS60001320G:http://ww1.microchip.com/downloads/en/DeviceDoc/PIC32MZ EF Family Datasheet_DS60001320G.pdf
以上就是关于pos机万能驱动下载,PIC32MZ芯片spi驱动开发的知识,后面我们会继续为大家整理关于pos机万能驱动下载的知识,希望能够帮助到大家!
