//***************************************************************************** // //! \brief Return the A/D conversion rate (sample/second.)The conversion rate //! depends on the clock source of ADC clock.It needs about 38 ADC clocks to //! complete an A/D conversion. //! //! \param None //! //! \return Conversion rate. // //***************************************************************************** uint32_t DrvADC_GetConversionRate(void) { if( CLK->CLKSEL1_BITS.ADC_S == 0 ) /* external 12MHz crystal clock */ { return (__XTAL/(CLK->CLKDIV_BITS.ADC_N + 1)/38); } if( CLK->CLKSEL1_BITS.ADC_S == 2 ) /* HCLK */ { return (DrvSYS_GetHCLKFreq()/(CLK->CLKDIV_BITS.ADC_N + 1)/38); } else /* internal 22MHz RC oscillator clock */ { return (__IRC22M/(CLK->CLKDIV_BITS.ADC_N + 1)/38); } }
uint8_t Read_24LC64(uint32_t address) { uint8_t TEMP; //Open I2C1 and set clock = 50Kbps SystemCoreClock = DrvSYS_GetHCLKFreq(); DrvI2C_Open(I2C_PORT1, 50000); //send i2c start DrvI2C_Ctrl(I2C_PORT1, 1, 0, 1, 0); //set start while (I2C1->I2CON.SI == 0); //poll si flag //send writer command I2C1->I2CDAT = 0XA0; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0); //clr si while( I2C1->I2CON.SI == 0 ); //poll si flag //send address high I2C1->I2CDAT = (address>>8)&0XFF; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack while( I2C1->I2CON.SI == 0 ); //poll si flag //send address low I2C1->I2CDAT = address&0XFF; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0); //clr si and set ack while( I2C1->I2CON.SI == 0 ); //poll si flag //send start flag DrvI2C_Ctrl(I2C_PORT1, 1, 0, 1, 0); //clr si and send start while( I2C1->I2CON.SI == 0 ); //poll si flag //send read command I2C1->I2CDAT = 0XA1; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si while( I2C1->I2CON.SI == 0 ); //poll si flag //resive data I2C1->I2CDAT = 0XFF; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0); //clr si while( I2C1->I2CON.SI == 0 ); //poll si flag TEMP= I2C1->I2CDAT; //send i2c stop DrvI2C_Ctrl(I2C_PORT1, 0, 1, 1, 0); //clr si and set stop while( I2C1->I2CON.STO); DrvI2C_Close(I2C_PORT1); return TEMP; }
void Write_24LC64(uint32_t address,uint8_t data ) { uint32_t i; SystemCoreClock = DrvSYS_GetHCLKFreq(); //Open I2C1 and set clock = 50Kbps DrvI2C_Open(I2C_PORT1, 50000); //send i2c start DrvI2C_Ctrl(I2C_PORT1, 1, 0, 0, 0); //set start while (I2C1->I2CON.SI == 0); //poll si flag //send writer command I2C1->I2CDAT = 0XA0; //send writer command DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0); //clr si flag while( I2C1->I2CON.SI == 0 ); //poll si flag //send address high I2C1->I2CDAT = (address>>8)&0XFF; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack while( I2C1->I2CON.SI == 0 ); //poll si flag //send address low I2C1->I2CDAT = address&0XFF; DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack while( I2C1->I2CON.SI == 0 ); //poll si flag //send data I2C1->I2CDAT = data; //write data to DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack while( I2C1->I2CON.SI == 0 ); //poll si flag //send i2c stop DrvI2C_Ctrl(I2C_PORT1, 0, 1, 1, 0); //send stop while( I2C1->I2CON.STO); //while( I2C1->CON.SI == 0 ); for(i=0; i<60; i++); DrvI2C_Close(I2C_PORT1); for(i=0; i<6000; i++); for(i=0; i<6000; i++); }