9008-2 3.3v GPIO

Dear ADI,

I had a problem very puzzled, when using Tailse API to do some of 3.3v GPIO control program in 9008-2 board.

According to UG1295 datasheet description, I use Tailse API to control 3.3Vgpio output/input in TAL_GPIO3V3_BITBANG_MODE mode.

3.3 V GPIO, Bitbang Mode
The 3.3 V GPIO bitbang mode allows the user to configure the 3.3 V GPIO pins as inputs or outputs where the device can read back or set
pin logic levels. This mode is also referred to as manual mode. If a GPIO pin is configured as an input, the user can read back the logic
level present at the input. The logic readback is either 0 or 1 (must be connected to ground or VDDA_3P3). If a GPIO pin is configured as
an output, the user is able to set a logic level on the pin (must be connected to ground or VDDA_3P3).

The result of the experiment is that a set of 3.3V GPIO_3P3_8--GPIO_3P3_11 failed to control the output. I can not measured a 3.3V voltage output.

The group of 3.3V GPIO_3P3_0--GPIO_3P3_3 and GPIO_3P3_4--GPIO_3P3_7  output 3.3v voltage  successfully!

My code:

#ifdef ADRV_9008_2

// 3.3v gpio 0 ---gpio 11 all config output 

uint16_t tx_Setgpio3v3SrcCtr=0x0FFF; // Not understood , I guess
uint16_t tx_Getgpio3v3SrcCtr=0;

uint16_t tx_Setgpio3v3OutEn =0x0FFF;  // all ouput enable
uint16_t tx_Setgpio3v3UsedMask =0x0FFF;
uint16_t tx_Getgpio3v3OutEn =0;

uint16_t tx_Setgpio3v3PinLevel=0x0FFF;//all  ouput value  is 1

uint16_t tx_Getgpio3v3PinSetLevel=0;

talAction = TALISE_setGpio3v3SourceCtrl(&talDevice, tx_Setgpio3v3SrcCtr);
if (talAction != TALACT_NO_ACTION) {
printf("error: TALISE_setGpio3v3SourceCtrl() failed\n");
goto error_11;
talAction = TALISE_getGpio3v3SourceCtrl(&talDevice, &tx_Getgpio3v3SrcCtr);
printf("debug: TALISE_getGpio3v3SourceCtrl() tx_Getgpio3v3SrcCtr=0x%X\n",tx_Getgpio3v3SrcCtr);
if (talAction != TALACT_NO_ACTION) {
printf("error: TALISE_setGpio3v3SourceCtrl() failed\n");
goto error_11;

talAction = TALISE_setGpio3v3Oe(&talDevice, tx_Setgpio3v3OutEn, tx_Setgpio3v3UsedMask);
if (talAction != TALACT_NO_ACTION) {
printf("error: TALISE_setGpio3v3Oe() failed\n");
goto error_11;
talAction = TALISE_getGpio3v3Oe(&talDevice, &tx_Getgpio3v3OutEn);
printf("debug: TALISE_getGpio3v3Oe() tx_Getgpio3v3OutEn=0x%X\n",tx_Getgpio3v3OutEn);
if (talAction != TALACT_NO_ACTION) {
printf("error: TALISE_getGpio3v3Oe() failed\n");
goto error_11;

 talAction = TALISE_setGpio3v3PinLevel(&talDevice, tx_Setgpio3v3PinLevel);
 if (talAction != TALACT_NO_ACTION) {
 printf("error: TALISE_setGpio3v3PinLevel() failed\n");
 goto error_11;
 talAction = TALISE_getGpio3v3SetLevel(&talDevice, &tx_Getgpio3v3PinSetLevel);
 printf("debug: TALISE_getGpio3v3SetLevel() tx_Getgpio3v3PinSetLevel=0x%X\n",tx_Getgpio3v3PinSetLevel);
 if (talAction != TALACT_NO_ACTION) {
 printf("error: TALISE_getGpio3v3SetLevel() failed\n");
 goto error_11;

Is there something wrong with my C code ?

I made some notes about the UG1295 document。

(ug1295 desc:)


The device features twelve, 3.3 V capable GPIOs that can be configured for numerous functions. Similar to the low voltage GPIO pins, the
3.3 V GPIO pins can be used for monitoring or controlling external devices. However, not all functions of the 3.3 V GPIOs and the low
voltage GPIOs are interchangeable. 

The physical pins that are used to control the 3.3 V GPIO pins are the same physical pins that are used to control the AUXDACs
(see Table 140). It is important to note that an AUXDAC function is given priority over a 3.3 V GPIO function that is assigned to the same
GPIO.  // Need to disable Aux DAC ?

Specific operation modes for the 3.3 V GPIO include level translate and inverted level translate mode, manual control of the 3.3 V GPIO
logic level (also known as bitbang mode), and gain table external element control.

TALISE_setGpio3v3SourceCtrl ()
This function sets the 3.3 V GPIO output source for different GPIO functionalities.

This function only affects the GPIO pins that are set as outputs. Each GPIO nibble (four pins) can be assigned to a GPIO source

and must share that same GPIO output source.

The taliseGpio3v3Mode_t structure can be bit shifted and bitwise OR-ed together to create the value for the gpioSrcCtrl parameter.  // NOT Understand

The function is as follows:
uint32_t TALISE_setGpio3v3SourceCtrl(taliseDevice_t *device, uint16_t gpio3v3SrcCtrl)
Parameters include the following:
• *device is a structure pointer to the device data structure.
• gpio3v3SrcCtrl is a nibble-based source control. This is a 12-bit value containing three nibbles that set the output source control
for each set of four GPIO pins.  

The parameter of gpio3v3SrcCtrl is 0xFFF, which means that  3.3v Gpio 0-11 are all output.  //  Is right ?