2025-06-26 8:40 AM
volatile UB__8 ubAisRxData;
volatile UB__8 ubSpiStatus = 0;
void SPI_vInit(void) {
disable_interrupts();
configure_D_OUT_SPI_MOSI_Pin(); // PTBDD_PTBDD5 = 1; // MOSI
configure_D_IN_SPI_MISO_Pin(); //PTBDD_PTBDD4 = 0; // MISO
configure_D_OUT_SPI_CLK_Pin(); // PTBDD_PTBDD6 = 1; // SCK
set_CS1_high(); // Sensor 1 disable
set_CS2_high(); // Sensor 2 disable
// SPI Control Register 1
SPIC1 = 0xD4; // SPE=1, MSTR=1, SSOE=0, CPOL=0, CPHA=0, SPIE=1
//SPIC1 = 0xF0; // SPE=1, MSTR=1, SSOE=0, CPOL=0, CPHA=0, SPIE=1
// SPI Control Register 2
SPIC2 = 0x00;
// SPI Baud Rate Register (set to suitable speed)
//SPIBR = 0x10; // Divide bus clock 16 Mhz, spi clock 5,33Mhz
SPIBR = 0x11; // Divide bus clock 16 Mhz, spi clock 4 Mhz
// Clear status flags by reading SPIS and SPID
(void)SPIS;
(void)SPID;
enable_interrupts();
}
void SPI_vSendByte(UB__8 ubSpiTransfer, UB__8 ubSpiChannel)
{
volatile UB__8 ubAisStatus;
volatile UB__8 ubAisRx;
while (!(SPIS)); // Wait until transmit buffer is empty
SPID = ubSpiTransfer;
while(!ubSpiStatus);
ubSpiStatus = 0;
}
_INTERRUPT_VOID SPI_vTransferISR (void)
{
if(SPIS==0xA0)
{
ubAisRxData = SPID;
ubSpiStatus = 1;
}
}
UB__8 AIS1120SX_ubSensorConfig(UB__8 ubAisSensor)
{
UW_16 readVal;
UB__8 retVal = 0;
UB__8 ubCrcVal;
UW_16 delay;
ubCrcVal = AIS1120SX_ubCrcVal (0xE18000); // to read 0c0C register from sensor Sensor type Val
set_CS1_low();
for(delay =0; delay < 10; delay++);
AIS1120SX_vWrite(0xE1,0x80,ubAisSensor ); // REG_CONFIG FIR is 1600 for X,Y and
//no ofset cancellation
AIS1120SX_vWrite(0x00,ubCrcVal,ubAisSensor ); // REG_CONFIG FIR is 1600 for X,Y and
// AIS1120SX_vWrite(0x8D,0x00,ubAisSensor );
// for(delay =0; delay < 10; delay++);
// AIS1120SX_vWrite(0x00,0x00,ubAisSensor );
set_CS1_high();
return retVal;
}
void AIS1120SX_vWrite(UB__8 ubAis_addr, UB__8 ubAisData,UB__8 ubAisSensor) {
UW_16 delay;
SPI_vSendByte(ubAis_addr, ubAisSensor);
SPI_vSendByte(ubAisData, ubAisSensor);
}
UB__8 AIS1120SX_ubCrcVal(UL_32 ulCrcVal) {
UB__8 crc = 0x00;
UB__8 poly = 0x97;
//UL_32 poly = 0x12F;
UB__8 i;
UB__8 b;
// Process only the top 3 bytes of data24 (ignoring the lowest byte)
for (i = 0; i<3; i++)
{
crc ^= (UB__8)((ulCrcVal >> (i * 8)));
for (b = 0; b < 8; b++)
{
if (crc & 0x80)
{
crc = (UB__8)((crc << 1) ^ poly);
}
else
{
crc <<= 1;
}
}
}
return crc;
}
2025-06-30 1:43 AM
This Makes sense , i will try with oscilloscope , do you feel the level-shifter also be an limitation?
2025-06-30 1:44 AM
hi , you means upto 5Mhz data rates are working in your setup? in this case as you mentioned i use level shifter this could cause the issue. i must try with out this?please inform
2025-06-30 2:14 AM
@TDK wrote:Long wires are not going to be amenable to high data rates.
Indeed.
@anandhram1988 again, this is why you have been asked to provide schematics and photos of your setup.
If you want help, you need to supply the necessary information for people to know what's going on!
2025-06-30 2:24 AM - edited 2025-06-30 2:25 AM
Thanks, i have again attached the schematic picture , is this enough? Left side of level shifter outputs are connected to MCU MC9S08SH32 which is 5V VDD.
Working as consultant i have limitations in sharing the documents but i have attached whatever possible and necessary. Do you think other information is required.
Thanks in advance
2025-06-30 2:30 AM
Again, that's not a complete schematic.
You haven't identified what the level-shifter is.
@anandhram1988 wrote:Working as consultant
You should understand how important it is to get complete information from your clients!
Imagine if someone asked you a question like this about a product you couldn't see, and knew nothing about!