Mornin', I have tested the code you gave me to test the GPIO functiuns and it works well! So the problem doesn't become from the GPIO functions. They works under AT91M55800A. To understand what the multiplexor does, I have studied its datasheet. If I would like to activate the NSPICS5, I have to put the next values:NSPCS0=1, NSPCS1=0, NSPCS2=1, NSPCS0=3. I did it with the next code. By this way, I think that the dev_num value is ignored. Am I right? : static void spi_at91_set_npcs(cyg_spi_at91_bus_t *spi_bus,int val) { HAL_ARM_AT91_GPIO_PUT(AT91_SPI_NPCS0, 1); HAL_ARM_AT91_GPIO_PUT(AT91_SPI_NPCS1, 0); HAL_ARM_AT91_GPIO_PUT(AT91_SPI_NPCS2, 1); HAL_ARM_AT91_GPIO_PUT(AT91_SPI_NPCS3, 0); } As I was not sure of the NPCS3 value, I tried to change it and no changes appeared. I made many measures before/after the multioplexor and on the final board's pins. I checked the connections between pins of board and multiplexor, they are OK. No changes appears on the final board's pins. Are you sure that the switches inside the processor are closed (see attached schema)? I have never seen this operation... If I want to close it anyway, have I got to use the HAL_WRITE_UINT32 function with the address and the value of the corresponding register? Thank you very much for help! Regards, Stéphane ________________________________ > Yes, the processor is a AT91M55800A. Effectively, it has only one SPI device. > > First, I printed the values of "val" in the set_npcs > function. Effectively, they change when I change the dev_num > value. As I understand the function and the values printed, it is > not writed to work with a multiplexor. Yes it is. Look at spi_at91_start_transfer() where it calls spi_at91_set_npcs(). > static void > spi_at91_set_npcs(cyg_spi_at91_bus_t *spi_bus,int val) > { > /*cyg_uint32 ctr; > for(ctr=0;ctr<4;ctr++) > { > printf("### val1=%i, val2=%i ###\n",val, (val & (1< if(spi_bus->cs_en[ctr]) > { > HAL_ARM_AT91_GPIO_PUT(spi_bus->cs_gpio[ctr], (val & (1< } > }*/ > > HAL_ARM_AT91_GPIO_PUT(spi_bus->cs_gpio[0], 0); > HAL_ARM_AT91_GPIO_PUT(spi_bus->cs_gpio[1], 1); > HAL_ARM_AT91_GPIO_PUT(spi_bus->cs_gpio[2], 0); > HAL_ARM_AT91_GPIO_PUT(spi_bus->cs_gpio[3], 1); > } > > I have tried many values for the different bits because I don't know > which is the MSB and the LSB. No changes appeared. I never had the > chip select CS5-8 activated. And what happens to the actual chip pins, not the demultiplexor pins. Does the chip pins change? It could be something like the GPIO functions are not working for the AT91M55800A. Which pin is your LED on? Try something like: HAL_ARM_AT91_GPIO_CFG_DIRECTION(AT91_PIN_LED, AT91_PIN_OUT); for(;;) { HAL_ARM_AT91_GPIO_PUT(AT91_PIN_LED,0); cyg_thread_delay(100); HAL_ARM_AT91_GPIO_PUT(AT91_PIN_LED,1); cyg_thread_delay(100); }