void HAL_ATASetModes(int bus, struct atamode *dev0, struct atamode *dev1)
| Entry | |
|---|---|
| bus | Bus number to modify |
| dev0 | Settings for device 0 |
| dev1 | Settings for device 1 |
| Exit | |
|---|---|
| - |
This is an internal call for use by the ADFS module and should not be used by user software.
This call sets the interface timings for PIO and Multiword or Ultra DMA. The structure is updated to show the actual modes selected, if the requested modes were not available.
On entry, both DMA and Ultra DMA modes may be requested – the DMA mode indicates the fallback if Ultra DMA is not available. On exit, no more than 1 of dma_mode and udma_mode will be set to valid values.
The call specifies timings for both devices simultaneously, as it may not be possible to set independent timings, requiring the highest common mode to be set.
Either pointer on entry may be null, indicating that that device is not in use.
The atamode struct is as follows:
struct atamode
{
uint32_t flags;
uint8_t pio_mode; // (eg 0-4)
uint8_t dma_mode; // (eg 0-2) 0xFF if none
uint8_t udma_mode; // (eg 0-5) 0xFF if none
uint8_t reserved; // set to 0xFF
}
The available flags are:
| Bit | Meaning |
|---|---|
| 0 | FIFOs enabled (i.e. non-packet device that waits for interrupts) |