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 ModeThe 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 setpin 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 logiclevel 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 asan 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; } mdelay(10); 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; } mdelay(10); 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;} mdelay(10); 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:)
3.3 V GPIO OPERATION
The device features twelve, 3.3 V capable GPIOs that can be configured for numerous functions. Similar to the low voltage GPIO pins, the3.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 lowvoltage 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 sameGPIO. // 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 GPIOlogic 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 controlfor 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 ?