Hello,
Setting GPIO pins using the DAT register and the byte Intrinsic as shown below is not working. However, setting the GPIO pins using the SET and CLEAR registers is working.
What am I doing wrong?
Stephen
Code to set GPIO pins using byte Intrinsic:
int16 s16Value = (int16)((Uint16)u8DACValue);
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00001;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00002;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00004;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00008;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00010;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00020;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00040;
__byte((int16*)&GpioDataRegs.GPADAT.all,0) |= s16Value&0x00080;
Code to set GPIO pins using SET and CLEAR registers:
#define SET_DATA_BUS(u8Value) \
if (u8Value & 0x0001) \
{ \
GpioDataRegs.GPASET.bit.GPIO0 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; \
} \
if (u8Value & 0x0002) \
{ \
GpioDataRegs.GPASET.bit.GPIO1 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO1 = 1; \
} \
if (u8Value & 0x0004) \
{ \
GpioDataRegs.GPASET.bit.GPIO2 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; \
} \
if (u8Value & 0x0008) \
{ \
GpioDataRegs.GPASET.bit.GPIO3 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO3 = 1; \
} \
if (u8Value & 0x0010) \
{ \
GpioDataRegs.GPASET.bit.GPIO4 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; \
} \
if (u8Value & 0x0020) \
{ \
GpioDataRegs.GPASET.bit.GPIO5 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO5 = 1; \
} \
if (u8Value & 0x0040) \
{ \
GpioDataRegs.GPASET.bit.GPIO6 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO6 = 1; \
} \
if (u8Value & 0x0080) \
{ \
GpioDataRegs.GPASET.bit.GPIO7 = 1; \
} \
else \
{ \
GpioDataRegs.GPACLEAR.bit.GPIO7 = 1; \
} \

