i2c eeprom
This commit is contained in:
parent
49d32751ef
commit
bd1ce624a4
Binary file not shown.
@ -16,10 +16,11 @@
|
|||||||
#include "f28x_project.h"
|
#include "f28x_project.h"
|
||||||
#include "init_perif.h"
|
#include "init_perif.h"
|
||||||
#include"frm_uart.h"
|
#include"frm_uart.h"
|
||||||
#include "spi_init.h"
|
#include "i2c_init.h"
|
||||||
|
|
||||||
#include "BL25CM1A.h"
|
#include "BL25CM1A.h"
|
||||||
#include "GD25Q16ETIGR.h"
|
#include "GD25Q16ETIGR.h"
|
||||||
|
#include "ZD24C02A.h"
|
||||||
//
|
//
|
||||||
// Main
|
// Main
|
||||||
//
|
//
|
||||||
@ -31,7 +32,22 @@ volatile uint16_t counter2=0 ;
|
|||||||
|
|
||||||
|
|
||||||
uint16_t sendNow = 0;
|
uint16_t sendNow = 0;
|
||||||
|
uint16_t TestADR = 0;
|
||||||
|
uint16_t NByte = 16;
|
||||||
|
uint16_t WriteI2C = 0;
|
||||||
|
uint16_t Adr = 0;
|
||||||
|
|
||||||
|
Uint16 MainTimerTimeouts = 0;
|
||||||
|
|
||||||
|
|
||||||
|
void MainTimerBaseTimeoutInc(void)
|
||||||
|
{
|
||||||
|
MainTimerTimeouts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t ArrayForTests[MAX_BUFFER_SIZE] = {0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0};
|
||||||
|
|
||||||
|
uint16_t ArrayMax[256];
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
@ -47,12 +63,38 @@ void main(void)
|
|||||||
{
|
{
|
||||||
asm (" NOP");
|
asm (" NOP");
|
||||||
|
|
||||||
// if(sendNow)
|
if(sendNow)
|
||||||
// {
|
{
|
||||||
// Bl25cm1a_write();
|
// Bl25cm1a_write();
|
||||||
// GD25Q16ETIGR_write();
|
// GD25Q16ETIGR_write();
|
||||||
// sendNow = 0;
|
|
||||||
// }
|
|
||||||
|
if(WriteI2C)
|
||||||
|
{
|
||||||
|
for(Adr = 0; Adr < 255; Adr+=15)
|
||||||
|
{
|
||||||
|
ArrayForTests[0] = Adr;
|
||||||
|
ZD24C02A_write(NByte, ArrayForTests);
|
||||||
|
MainTimerTimeouts=0;
|
||||||
|
while(MainTimerTimeouts<1000);
|
||||||
|
while(!GpioDataRegs.GPADAT.bit.GPIO1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ArrayMax[0] = Adr;
|
||||||
|
NByte = 254;
|
||||||
|
ZD24C02A_read(NByte, ArrayMax);
|
||||||
|
}
|
||||||
|
sendNow = 0;
|
||||||
|
}
|
||||||
|
if(TestADR)
|
||||||
|
{
|
||||||
|
ZD24C02A_test(ArrayForTests);
|
||||||
|
TestADR = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(FMSTR_is_enable()) {
|
if(FMSTR_is_enable()) {
|
||||||
if(counter < 100) counter++;
|
if(counter < 100) counter++;
|
||||||
|
|||||||
@ -4,5 +4,31 @@
|
|||||||
* Created on: 8 ñåíò. 2023 ã.
|
* Created on: 8 ñåíò. 2023 ã.
|
||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
|
#include "f28x_project.h"
|
||||||
|
#include "i2c_init.h"
|
||||||
|
#include "ZD24C02A.h"
|
||||||
|
|
||||||
|
volatile uint16_t SlaveAdr = I2C_SLAVE_ADDRESS;
|
||||||
|
|
||||||
|
void ZD24C02A_write(uint16_t byteCount, uint16_t * Array)
|
||||||
|
{
|
||||||
|
I2CWrite(SlaveAdr, byteCount, true, Array);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZD24C02A_read(uint16_t byteCount, uint16_t * Array)
|
||||||
|
{
|
||||||
|
I2CWrite(SlaveAdr, 1, false, Array);
|
||||||
|
I2CRead(SlaveAdr, byteCount, true, Array);
|
||||||
|
// I2CWriteRead(I2C_SLAVE_ADDRESS, byteCount, true, Array);
|
||||||
|
// I2CWriteReadOnes(I2C_SLAVE_ADDRESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ZD24C02A_test(uint16_t * Array)
|
||||||
|
{
|
||||||
|
uint16_t i=0;
|
||||||
|
for(i=0;i<=255;i+=15)
|
||||||
|
{
|
||||||
|
I2CWrite(SlaveAdr, 1, true, Array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -8,6 +8,12 @@
|
|||||||
#ifndef SRC_ZD24C02A_H_
|
#ifndef SRC_ZD24C02A_H_
|
||||||
#define SRC_ZD24C02A_H_
|
#define SRC_ZD24C02A_H_
|
||||||
|
|
||||||
|
#define I2C_SLAVE_ADDRESS 0x51U
|
||||||
|
#define I2C_OWN_ADDRESS 0x30U
|
||||||
|
|
||||||
|
|
||||||
|
void ZD24C02A_write(uint16_t byteCount, uint16_t * Array);
|
||||||
|
void ZD24C02A_read(uint16_t byteCount, uint16_t * Array);
|
||||||
|
void ZD24C02A_test(uint16_t * Array);
|
||||||
|
|
||||||
#endif /* SRC_ZD24C02A_H_ */
|
#endif /* SRC_ZD24C02A_H_ */
|
||||||
|
|||||||
@ -22,6 +22,10 @@ void GpioInit(void)
|
|||||||
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0;
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0;
|
||||||
GpioCtrlRegs.GPADIR.bit.GPIO18 = 0;
|
GpioCtrlRegs.GPADIR.bit.GPIO18 = 0;
|
||||||
|
|
||||||
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO19 = 0;
|
||||||
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO19 = 0;
|
||||||
|
GpioCtrlRegs.GPADIR.bit.GPIO19 = 0;
|
||||||
|
|
||||||
EDIS;
|
EDIS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,18 +5,14 @@
|
|||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
#include "f28x_project.h"
|
#include "f28x_project.h"
|
||||||
|
#include "i2c_init.h"
|
||||||
//
|
//
|
||||||
// Function to configure I2CA as Master Transmitter.
|
// Function to configure I2CA as Master Transmitter.
|
||||||
//
|
//
|
||||||
|
|
||||||
#define I2C_SLAVE_ADDRESS 0x6AU
|
|
||||||
#define I2C_OWN_ADDRESS 0x30U
|
|
||||||
#define MAX_BUFFER_SIZE 0x10
|
|
||||||
#define I2C_NUMBYTES 0x2U
|
|
||||||
|
|
||||||
uint16_t I2C_TXdata[MAX_BUFFER_SIZE];
|
|
||||||
uint16_t I2C_RXdata[MAX_BUFFER_SIZE];
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// I2C GPIO pins
|
// I2C GPIO pins
|
||||||
@ -24,6 +20,17 @@ uint16_t I2C_RXdata[MAX_BUFFER_SIZE];
|
|||||||
#define GPIO_PIN_SDAA 0U // GPIO number for I2C SDAA
|
#define GPIO_PIN_SDAA 0U // GPIO number for I2C SDAA
|
||||||
#define GPIO_PIN_SCLA 1U // GPIO number for I2C SCLA
|
#define GPIO_PIN_SCLA 1U // GPIO number for I2C SCLA
|
||||||
|
|
||||||
|
#define TIME_OVER 1000
|
||||||
|
|
||||||
|
Uint16 TimerTimeouts = 0, ErrI2c = 0, ErrI2c1 = 0, ErrI2c2 = 0, ErrI2c3 = 0, Addr=0, Addr1[255];
|
||||||
|
uint16_t RXdata;
|
||||||
|
|
||||||
|
void TimerBaseTimeoutInc(void)
|
||||||
|
{
|
||||||
|
TimerTimeouts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void I2CMasterGpioInit(void)
|
void I2CMasterGpioInit(void)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@ -47,7 +54,7 @@ void I2CMasterInit(uint16_t I2C_OwnAddress, uint16_t I2CSlave_Address)
|
|||||||
// I2C configuration. Use a 400kHz I2CCLK with a 50% duty cycle.
|
// I2C configuration. Use a 400kHz I2CCLK with a 50% duty cycle.
|
||||||
//
|
//
|
||||||
//I2C_initMaster(base, DEVICE_SYSCLK_FREQ, 400000, I2C_DUTYCYCLE_50);
|
//I2C_initMaster(base, DEVICE_SYSCLK_FREQ, 400000, I2C_DUTYCYCLE_50);
|
||||||
I2caRegs.I2CPSC.all = 0xB; // Prescaler - need 7-12 Mhz on module clk
|
I2caRegs.I2CPSC.all = 23; // Prescaler - need 7-12 Mhz on module clk
|
||||||
I2caRegs.I2CCLKL = 0x7; // NOTE: must be non zero
|
I2caRegs.I2CCLKL = 0x7; // NOTE: must be non zero
|
||||||
I2caRegs.I2CCLKH = 0x8; // NOTE: must be non zero
|
I2caRegs.I2CCLKH = 0x8; // NOTE: must be non zero
|
||||||
|
|
||||||
@ -61,7 +68,7 @@ void I2CMasterInit(uint16_t I2C_OwnAddress, uint16_t I2CSlave_Address)
|
|||||||
//
|
//
|
||||||
// Set data count
|
// Set data count
|
||||||
//
|
//
|
||||||
I2caRegs.I2CCNT = I2C_NUMBYTES;
|
// I2caRegs.I2CCNT = I2C_NUMBYTES;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set the bit count to 8 bits per data byte
|
// Set the bit count to 8 bits per data byte
|
||||||
@ -97,10 +104,11 @@ void I2CMasterInit(uint16_t I2C_OwnAddress, uint16_t I2CSlave_Address)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t j = 0;
|
||||||
//
|
//
|
||||||
// Function to send data over I2C.
|
// Function to send data over I2C.
|
||||||
//
|
//
|
||||||
void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition, uint16_t * I2C_TXdata)
|
||||||
{
|
{
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -132,13 +140,16 @@ void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
|||||||
//
|
//
|
||||||
//transmit the bytes
|
//transmit the bytes
|
||||||
//
|
//
|
||||||
for(index=0; index < I2C_NUMBYTES; index++)
|
for(index=0; index < byteCount; index++)
|
||||||
{
|
{
|
||||||
I2caRegs.I2CDXR.all= I2C_TXdata[index];
|
I2caRegs.I2CDXR.all= I2C_TXdata[index];
|
||||||
//
|
//
|
||||||
//wait till byte is sent
|
//wait till byte is sent
|
||||||
//
|
//
|
||||||
while(I2caRegs.I2CSTR.bit.BYTESENT != 0x1);
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CSTR.bit.BYTESENT != 0x1)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c++;
|
||||||
|
|
||||||
//
|
//
|
||||||
//clear the byte sent
|
//clear the byte sent
|
||||||
//
|
//
|
||||||
@ -151,8 +162,9 @@ void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
|||||||
if(sendStopCondition)
|
if(sendStopCondition)
|
||||||
{
|
{
|
||||||
I2caRegs.I2CMDR.bit.STP = 0x1;
|
I2caRegs.I2CMDR.bit.STP = 0x1;
|
||||||
while(I2caRegs.I2CMDR.bit.STP != 0x0);
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CMDR.bit.STP != 0x0)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c1++;
|
||||||
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,7 +172,7 @@ void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
|||||||
//
|
//
|
||||||
// Function to read data over I2C. Returns the number of bytes read
|
// Function to read data over I2C. Returns the number of bytes read
|
||||||
//
|
//
|
||||||
uint16_t I2CRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
uint16_t I2CRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition, uint16_t * I2C_RXdata)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Configure slave address
|
// Configure slave address
|
||||||
@ -176,26 +188,31 @@ uint16_t I2CRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
|||||||
//
|
//
|
||||||
//Set Data Count
|
//Set Data Count
|
||||||
//
|
//
|
||||||
//I2caRegs.I2CCNT = byteCount;
|
I2caRegs.I2CCNT = byteCount;
|
||||||
|
|
||||||
//
|
//
|
||||||
// send Start condition
|
// send Start condition
|
||||||
//
|
//
|
||||||
|
uint16_t count = 0;
|
||||||
|
if(count == (byteCount-1)) I2caRegs.I2CMDR.bit.NACKMOD = 0x1;
|
||||||
I2caRegs.I2CMDR.bit.STT = 0x1;
|
I2caRegs.I2CMDR.bit.STT = 0x1;
|
||||||
|
|
||||||
uint16_t count = 0;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Read the received data into RX buffer
|
// Read the received data into RX buffer
|
||||||
//
|
//
|
||||||
while(count < I2C_NUMBYTES)
|
TimerTimeouts = 0;
|
||||||
|
while((count < byteCount)&&(TimerTimeouts < TIME_OVER))
|
||||||
{
|
{
|
||||||
if(I2caRegs.I2CSTR.bit.RRDY ==0x1)
|
if(I2caRegs.I2CSTR.bit.RRDY ==0x1)
|
||||||
{
|
{
|
||||||
I2C_RXdata[count] = I2caRegs.I2CDRR.all;
|
RXdata = I2C_RXdata[count] = I2caRegs.I2CDRR.all;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c2 += (byteCount - count);
|
||||||
|
I2caRegs.I2CMDR.bit.NACKMOD = 0x0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Send STOP condition
|
// Send STOP condition
|
||||||
@ -203,12 +220,269 @@ uint16_t I2CRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition)
|
|||||||
if(sendStopCondition)
|
if(sendStopCondition)
|
||||||
{
|
{
|
||||||
I2caRegs.I2CMDR.bit.STP = 0x1;
|
I2caRegs.I2CMDR.bit.STP = 0x1;
|
||||||
while(I2caRegs.I2CMDR.bit.STP != 0x0);
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CMDR.bit.STP != 0x0)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c3++;
|
||||||
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t I2CWriteRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition, uint16_t * I2C_RXdata)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Locals
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure slave address
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSAR.all = slaveAddr; // Slave address
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure I2C as Master Transmitter
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.MST = 0x1;
|
||||||
|
I2caRegs.I2CMDR.bit.TRX = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
//Set Data Count
|
||||||
|
//
|
||||||
|
I2caRegs.I2CCNT = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// send Start condition
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.STT = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
//transmit the bytes
|
||||||
|
//
|
||||||
|
|
||||||
|
I2caRegs.I2CDXR.all= I2C_RXdata[0];
|
||||||
|
//
|
||||||
|
//wait till byte is sent
|
||||||
|
//
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CSTR.bit.BYTESENT != 0x1)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c++;
|
||||||
|
else Addr = slaveAddr;
|
||||||
|
//
|
||||||
|
//clear the byte sent
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure slave address
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSAR.all = slaveAddr;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure I2C in Master Receiver mode
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.MST = 0x1;
|
||||||
|
I2caRegs.I2CMDR.bit.TRX = 0x0;
|
||||||
|
|
||||||
|
//
|
||||||
|
//Set Data Count
|
||||||
|
//
|
||||||
|
I2caRegs.I2CCNT = byteCount;
|
||||||
|
|
||||||
|
//
|
||||||
|
// send Start condition
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.STT = 0x1;
|
||||||
|
|
||||||
|
uint16_t count = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Read the received data into RX buffer
|
||||||
|
//
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((count < byteCount)&&(TimerTimeouts < TIME_OVER))
|
||||||
|
{
|
||||||
|
if(count == (byteCount-1)) I2caRegs.I2CMDR.bit.NACKMOD = 0x1;
|
||||||
|
if(I2caRegs.I2CSTR.bit.RRDY ==0x1)
|
||||||
|
{
|
||||||
|
I2C_RXdata[count] = I2caRegs.I2CDRR.all;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c2 += (byteCount - count);
|
||||||
|
I2caRegs.I2CMDR.bit.NACKMOD = 0x0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Send STOP condition
|
||||||
|
//
|
||||||
|
if(sendStopCondition)
|
||||||
|
{
|
||||||
|
I2caRegs.I2CMDR.bit.STP = 0x1;
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CMDR.bit.STP != 0x0)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c3++;
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void I2CWriteReadOnes(uint16_t slaveAddr)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Locals
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure slave address
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSAR.all = slaveAddr; // Slave address
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure I2C as Master Transmitter
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.MST = 0x1;
|
||||||
|
I2caRegs.I2CMDR.bit.TRX = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
//Set Data Count
|
||||||
|
//
|
||||||
|
I2caRegs.I2CCNT = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// send Start condition
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.STT = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
//transmit the bytes
|
||||||
|
//
|
||||||
|
|
||||||
|
I2caRegs.I2CDXR.all= 0x80;
|
||||||
|
//
|
||||||
|
//wait till byte is sent
|
||||||
|
//
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CSTR.bit.BYTESENT != 0x1)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c++;
|
||||||
|
else Addr = slaveAddr;
|
||||||
|
//
|
||||||
|
//clear the byte sent
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure slave address
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSAR.all = slaveAddr;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure I2C in Master Receiver mode
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.MST = 0x1;
|
||||||
|
I2caRegs.I2CMDR.bit.TRX = 0x0;
|
||||||
|
|
||||||
|
//
|
||||||
|
//Set Data Count
|
||||||
|
//
|
||||||
|
I2caRegs.I2CCNT = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// send Start condition
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.STT = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Read the received data into RX buffer
|
||||||
|
//
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
I2caRegs.I2CMDR.bit.NACKMOD = 0x1;
|
||||||
|
while((I2caRegs.I2CSTR.bit.RRDY != 0x1)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c2++;
|
||||||
|
else RXdata = I2caRegs.I2CDRR.all;
|
||||||
|
I2caRegs.I2CMDR.bit.NACKMOD = 0x0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Send STOP condition
|
||||||
|
//
|
||||||
|
|
||||||
|
I2caRegs.I2CMDR.bit.STP = 0x1;
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CMDR.bit.STP != 0x0)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c3++;
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void I2CWriteOnse(uint16_t slaveAddr)
|
||||||
|
{
|
||||||
|
|
||||||
|
//
|
||||||
|
// Locals
|
||||||
|
//
|
||||||
|
uint16_t index = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure slave address
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSAR.all = slaveAddr; // Slave address
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure I2C as Master Transmitter
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.MST = 0x1;
|
||||||
|
I2caRegs.I2CMDR.bit.TRX = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
//Set Data Count
|
||||||
|
//
|
||||||
|
I2caRegs.I2CCNT = 2;
|
||||||
|
|
||||||
|
//
|
||||||
|
// send Start condition
|
||||||
|
//
|
||||||
|
I2caRegs.I2CMDR.bit.STT = 0x1;
|
||||||
|
|
||||||
|
//
|
||||||
|
//transmit the bytes
|
||||||
|
//
|
||||||
|
|
||||||
|
I2caRegs.I2CDXR.all= 0x80;
|
||||||
|
//
|
||||||
|
//wait till byte is sent
|
||||||
|
//
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CSTR.bit.BYTESENT != 0x1)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c++;
|
||||||
|
else Addr = slaveAddr;
|
||||||
|
//
|
||||||
|
//clear the byte sent
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
|
||||||
|
I2caRegs.I2CDXR.all= RXdata;
|
||||||
|
//
|
||||||
|
//wait till byte is sent
|
||||||
|
//
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CSTR.bit.BYTESENT != 0x1)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c++;
|
||||||
|
else Addr = slaveAddr;
|
||||||
|
//
|
||||||
|
//clear the byte sent
|
||||||
|
//
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
//
|
||||||
|
// Send STOP condition if specified
|
||||||
|
//
|
||||||
|
|
||||||
|
I2caRegs.I2CMDR.bit.STP = 0x1;
|
||||||
|
TimerTimeouts = 0;
|
||||||
|
while((I2caRegs.I2CMDR.bit.STP != 0x0)&&(TimerTimeouts < TIME_OVER));
|
||||||
|
if(TimerTimeouts >= TIME_OVER) ErrI2c1++;
|
||||||
|
I2caRegs.I2CSTR.bit.BYTESENT = 0x1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -8,12 +8,21 @@
|
|||||||
#ifndef SRC_I2C_INIT_H_
|
#ifndef SRC_I2C_INIT_H_
|
||||||
#define SRC_I2C_INIT_H_
|
#define SRC_I2C_INIT_H_
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_BUFFER_SIZE 0x10
|
||||||
//
|
//
|
||||||
// Function Prototypes
|
// Function Prototypes
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void I2CMasterInit(uint16_t I2CSlave_OwnAddress, uint16_t I2CSlave_Address);
|
void I2CMasterInit(uint16_t I2CSlave_OwnAddress, uint16_t I2CSlave_Address);
|
||||||
void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition);
|
void I2CWrite(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition, uint16_t * I2C_TXdata);
|
||||||
uint16_t I2CRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition);
|
uint16_t I2CRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition, uint16_t * I2C_RXdata);
|
||||||
|
uint16_t I2CWriteRead(uint16_t slaveAddr, uint16_t byteCount, bool sendStopCondition, uint16_t * I2C_RXdata);
|
||||||
void I2CMasterGpioInit(void);
|
void I2CMasterGpioInit(void);
|
||||||
|
void TimerBaseTimeoutInc(void);
|
||||||
|
void I2CWriteReadOnes(uint16_t slaveAddr);
|
||||||
|
void I2CWriteOnse(uint16_t slaveAddr);
|
||||||
|
|
||||||
#endif /* SRC_I2C_INIT_H_ */
|
#endif /* SRC_I2C_INIT_H_ */
|
||||||
|
|||||||
@ -13,7 +13,9 @@
|
|||||||
#include "gpio_init.h"
|
#include "gpio_init.h"
|
||||||
#include "spi_init.h"
|
#include "spi_init.h"
|
||||||
#include "i2c_init.h"
|
#include "i2c_init.h"
|
||||||
|
#include "BL25CM1A.h"
|
||||||
|
#include "GD25Q16ETIGR.h"
|
||||||
|
#include "ZD24C02A.h"
|
||||||
|
|
||||||
void InitPerif(void)
|
void InitPerif(void)
|
||||||
{
|
{
|
||||||
@ -65,7 +67,7 @@ void InitPerif(void)
|
|||||||
SdfmInitInterruptEn();
|
SdfmInitInterruptEn();
|
||||||
SdfmInit(SDFM1);
|
SdfmInit(SDFM1);
|
||||||
SpiInit();
|
SpiInit();
|
||||||
// I2CMasterInit();
|
I2CMasterInit(I2C_OWN_ADDRESS,I2C_SLAVE_ADDRESS);
|
||||||
//
|
//
|
||||||
// Enable global Interrupts and higher priority real-time debug events:
|
// Enable global Interrupts and higher priority real-time debug events:
|
||||||
//
|
//
|
||||||
|
|||||||
@ -64,6 +64,7 @@ void PWMAllInit(void)
|
|||||||
PwmBrake100 = PERIOD_BRAKE;
|
PwmBrake100 = PERIOD_BRAKE;
|
||||||
PwmMotor100 = PERIOD_MOTOR;
|
PwmMotor100 = PERIOD_MOTOR;
|
||||||
|
|
||||||
|
PWMInit(1, PwmMotor100, INDEPENDED);
|
||||||
PWMInit(2, PwmMotor100, COMPLIMENTARY);
|
PWMInit(2, PwmMotor100, COMPLIMENTARY);
|
||||||
PWMInit(3, PwmMotor100, COMPLIMENTARY);
|
PWMInit(3, PwmMotor100, COMPLIMENTARY);
|
||||||
PWMInit(4, PwmMotor100, COMPLIMENTARY);
|
PWMInit(4, PwmMotor100, COMPLIMENTARY);
|
||||||
@ -88,12 +89,12 @@ void PWMGpioInit(void)
|
|||||||
|
|
||||||
void PWMInitEnable(void)
|
void PWMInitEnable(void)
|
||||||
{
|
{
|
||||||
|
CpuSysRegs.PCLKCR2.bit.EPWM1=1;
|
||||||
CpuSysRegs.PCLKCR2.bit.EPWM2=1;
|
CpuSysRegs.PCLKCR2.bit.EPWM2=1;
|
||||||
CpuSysRegs.PCLKCR2.bit.EPWM3=1;
|
CpuSysRegs.PCLKCR2.bit.EPWM3=1;
|
||||||
CpuSysRegs.PCLKCR2.bit.EPWM4=1;
|
CpuSysRegs.PCLKCR2.bit.EPWM4=1;
|
||||||
CpuSysRegs.PCLKCR2.bit.EPWM5=1;
|
CpuSysRegs.PCLKCR2.bit.EPWM5=1;
|
||||||
CpuSysRegs.PCLKCR2.bit.EPWM6=1;
|
CpuSysRegs.PCLKCR2.bit.EPWM6=1;
|
||||||
CpuSysRegs.PCLKCR2.bit.EPWM11=1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PWMInitInterruptEn(void)
|
void PWMInitInterruptEn(void)
|
||||||
@ -102,7 +103,7 @@ void PWMInitInterruptEn(void)
|
|||||||
// ISR functions found within this file.
|
// ISR functions found within this file.
|
||||||
//
|
//
|
||||||
EALLOW; // This is needed to write to EALLOW protected registers
|
EALLOW; // This is needed to write to EALLOW protected registers
|
||||||
// PieVectTable.EPWM1_INT = &epwm1_isr;
|
PieVectTable.EPWM1_INT = &epwm1_isr;
|
||||||
PieVectTable.EPWM2_INT = &epwm2_isr;
|
PieVectTable.EPWM2_INT = &epwm2_isr;
|
||||||
PieVectTable.EPWM3_INT = &epwm3_isr;
|
PieVectTable.EPWM3_INT = &epwm3_isr;
|
||||||
PieVectTable.EPWM4_INT = &epwm4_isr;
|
PieVectTable.EPWM4_INT = &epwm4_isr;
|
||||||
@ -118,7 +119,7 @@ void PWMInitInterruptEn(void)
|
|||||||
//
|
//
|
||||||
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
|
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
|
||||||
//
|
//
|
||||||
// PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
|
||||||
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
|
||||||
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
|
||||||
PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
|
||||||
|
|||||||
@ -9,13 +9,13 @@
|
|||||||
#include "pwm_init.h"
|
#include "pwm_init.h"
|
||||||
#include"frm_uart.h"
|
#include"frm_uart.h"
|
||||||
#include "gpio_init.h"
|
#include "gpio_init.h"
|
||||||
|
#include "i2c_init.h"
|
||||||
|
#include "timer_base.h"
|
||||||
|
|
||||||
volatile Uint16 AutoChange = 0;
|
volatile Uint16 AutoChange = 0;
|
||||||
volatile Uint16 PWM_out = 0;
|
volatile Uint16 PWM_out = 0;
|
||||||
volatile Uint16 PWM_motor = PERIOD_2;
|
volatile Uint16 PWM_motor = PERIOD_2;
|
||||||
Uint16 Fault = 0, Fault_fix = 0;
|
Uint16 Fault = 0, Fault_fix = 0, Ready = 0;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// epwm1_isr - EPWM1 ISR
|
// epwm1_isr - EPWM1 ISR
|
||||||
//
|
//
|
||||||
@ -29,6 +29,8 @@ __interrupt void epwm1_isr(void)
|
|||||||
// Clear INT flag for this timer
|
// Clear INT flag for this timer
|
||||||
//
|
//
|
||||||
EPwm1Regs.ETCLR.bit.INT = 1;
|
EPwm1Regs.ETCLR.bit.INT = 1;
|
||||||
|
TimerBaseTimeoutInc();
|
||||||
|
MainTimerBaseTimeoutInc();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||||
@ -99,6 +101,7 @@ __interrupt void epwm4_isr(void)
|
|||||||
|
|
||||||
__interrupt void epwm5_isr(void)
|
__interrupt void epwm5_isr(void)
|
||||||
{
|
{
|
||||||
|
Ready = GpioDataRegs.GPADAT.bit.GPIO19;
|
||||||
Fault = !GpioDataRegs.GPADAT.bit.GPIO18;
|
Fault = !GpioDataRegs.GPADAT.bit.GPIO18;
|
||||||
if(Fault || Fault_fix)
|
if(Fault || Fault_fix)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user