本文共 6122 字,大约阅读时间需要 20 分钟。
#ifndef _DELAY_H#define _DELAY_H#include#include #include #include #include "system_config.h"#include "system_definitions.h"void delay_ms(uint32_t milliSeconds){ uint32_t frequencyHz = milliSeconds * (SYS_CLK_SystemFrequencyGet()/2000); //while occupy 2 period while(frequencyHz--);}void delay_us(uint32_t microSeconds){ uint32_t frequencyHz = microSeconds * (SYS_CLK_SystemFrequencyGet()/2000000); //while occupy 2 period while(frequencyHz--);}#endif
#ifndef _I2C_HARDWARE_H#define _I2C_HARDWARE_H#include "delay.h"typedef struct{ DRV_HANDLE i2c_drvHandle; DRV_I2C_BUFFER_HANDLE i2c_bufferHandle;}IIC_DATA;IIC_DATA i2cData;bool IIC_Initial(void);bool IIC_WriteByte(uint8_t slaveAddr, uint8_t IIC_Byte);bool IIC_WriteBytes(uint8_t slaveAddr, uint8_t *IIC_Bytes, uint8_t length);bool IIC_ReadBytes(uint8_t slaveAddr, uint8_t *IIC_Bytes, uint8_t readLength);#endif
#include "i2c-hardware.h"bool IIC_Initial(void){ i2cData.i2c_drvHandle = DRV_I2C_Open(0,DRV_IO_INTENT_READWRITE); if(i2cData.i2c_drvHandle==NULL) return false; else return true;}DRV_I2C_BUFFER_EVENT IIC_Check_Transfer_Status(DRV_HANDLE drvOpenHandle, DRV_I2C_BUFFER_HANDLE drvBufferHandle){ return (DRV_I2C_TransferStatusGet (drvOpenHandle, drvBufferHandle));}bool IIC_WriteByte(uint8_t slaveAddr, uint8_t IIC_Byte){ uint8_t tmp[] = {IIC_Byte}; if ( (i2cData.i2c_bufferHandle == (DRV_I2C_BUFFER_HANDLE) NULL) || (IIC_Check_Transfer_Status(i2cData.i2c_drvHandle, i2cData.i2c_bufferHandle) == DRV_I2C_BUFFER_EVENT_COMPLETE) || (IIC_Check_Transfer_Status(i2cData.i2c_drvHandle, i2cData.i2c_bufferHandle) == DRV_I2C_BUFFER_EVENT_ERROR) ) { i2cData.i2c_bufferHandle = DRV_I2C_Transmit(i2cData.i2c_drvHandle,slaveAddr,tmp,1,NULL); delay_ms(1); return true; } else return false;}bool IIC_WriteBytes(uint8_t slaveAddr, uint8_t *IIC_Bytes, uint8_t length){ if ( (i2cData.i2c_bufferHandle == (DRV_I2C_BUFFER_HANDLE) NULL) || (IIC_Check_Transfer_Status(i2cData.i2c_drvHandle, i2cData.i2c_bufferHandle) == DRV_I2C_BUFFER_EVENT_COMPLETE) || (IIC_Check_Transfer_Status(i2cData.i2c_drvHandle, i2cData.i2c_bufferHandle) == DRV_I2C_BUFFER_EVENT_ERROR) ) { i2cData.i2c_bufferHandle = DRV_I2C_Transmit(i2cData.i2c_drvHandle,slaveAddr,IIC_Bytes,length,NULL); delay_ms(1); return true; } else return false;}bool IIC_ReadBytes(uint8_t slaveAddr, uint8_t *IIC_Bytes, uint8_t readLength){ if ( (i2cData.i2c_bufferHandle == (DRV_I2C_BUFFER_HANDLE) NULL) || (IIC_Check_Transfer_Status(i2cData.i2c_drvHandle, i2cData.i2c_bufferHandle) == DRV_I2C_BUFFER_EVENT_COMPLETE) || (IIC_Check_Transfer_Status(i2cData.i2c_drvHandle, i2cData.i2c_bufferHandle) == DRV_I2C_BUFFER_EVENT_ERROR) ) { i2cData.i2c_bufferHandle = DRV_I2C_Receive(i2cData.i2c_drvHandle, slaveAddr, IIC_Bytes, readLength, NULL); delay_ms(1); return true; } else return false;}
void __ISR(_I2C1_MASTER_VECTOR, ipl1AUTO) _IntHandlerDrvI2CMasterInstance0(void){ DRV_I2C_Tasks(sysObj.drvI2C0);}void __ISR(_I2C1_BUS_VECTOR, ipl1AUTO) _IntHandlerDrvI2CErrorInstance0(void){ PLIB_INT_SourceFlagClear( INT_ID_0, INT_VECTOR_I2C1_BUS ); PLIB_I2C_Disable (I2C_ID_1); PLIB_I2C_Enable (I2C_ID_1); SYS_ASSERT(false, "I2C Driver Instance 0 Error");} void __ISR(_I2C2_MASTER_VECTOR, ipl1AUTO) _IntHandlerDrvI2CMasterInstance1(void){ DRV_I2C_Tasks(sysObj.drvI2C1);} void __ISR(_I2C2_BUS_VECTOR, ipl1AUTO) _IntHandlerDrvI2CErrorInstance1(void){ PLIB_INT_SourceFlagClear( INT_ID_0, INT_VECTOR_I2C2_BUS ); PLIB_I2C_Disable (I2C_ID_2); PLIB_I2C_Enable (I2C_ID_2); SYS_ASSERT(false, "I2C Driver Instance 1 Error");} void __ISR(_I2C3_MASTER_VECTOR, ipl1AUTO) _IntHandlerDrvI2CMasterInstance2(void){ DRV_I2C_Tasks(sysObj.drvI2C2);} void __ISR(_I2C3_BUS_VECTOR, ipl1AUTO) _IntHandlerDrvI2CErrorInstance2(void){ PLIB_INT_SourceFlagClear( INT_ID_0, INT_VECTOR_I2C3_BUS ); PLIB_I2C_Disable (I2C_ID_3); PLIB_I2C_Enable (I2C_ID_3); SYS_ASSERT(false, "I2C Driver Instance 2 Error");} void __ISR(_I2C4_MASTER_VECTOR, ipl1AUTO) _IntHandlerDrvI2CMasterInstance3(void){ DRV_I2C_Tasks(sysObj.drvI2C3);}void __ISR(_I2C4_BUS_VECTOR, ipl1AUTO) _IntHandlerDrvI2CErrorInstance3(void){ PLIB_INT_SourceFlagClear( INT_ID_0, INT_VECTOR_I2C4_BUS ); PLIB_I2C_Disable (I2C_ID_4); PLIB_I2C_Enable (I2C_ID_4); SYS_ASSERT(false, "I2C Driver Instance 3 Error");} void __ISR(_I2C5_MASTER_VECTOR, ipl1AUTO) _IntHandlerDrvI2CMasterInstance4(void){ DRV_I2C_Tasks(sysObj.drvI2C4);}void __ISR(_I2C5_BUS_VECTOR, ipl1AUTO) _IntHandlerDrvI2CErrorInstance4(void){ PLIB_INT_SourceFlagClear( INT_ID_0, INT_VECTOR_I2C5_BUS ); PLIB_I2C_Disable (I2C_ID_5); PLIB_I2C_Enable (I2C_ID_5); SYS_ASSERT(false, "I2C Driver Instance 4 Error");}