mirror of
https://github.com/google/pebble.git
synced 2025-06-14 05:33:12 +00:00
Import of the watch repository from Pebble
This commit is contained in:
commit
3b92768480
10334 changed files with 2564465 additions and 0 deletions
98
src/fw/drivers/qspi.h
Normal file
98
src/fw/drivers/qspi.h
Normal file
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Copyright 2024 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
//! Memory mapped region for the QSPI controller
|
||||
#define QSPI_MMAP_BASE_ADDRESS ((uintptr_t) 0x90000000)
|
||||
|
||||
//! Timouts for qspi_poll_bit
|
||||
#define QSPI_NO_TIMEOUT (0)
|
||||
|
||||
typedef const struct QSPIPort QSPIPort;
|
||||
|
||||
//! Enable the peripheral clock
|
||||
void qspi_use(QSPIPort *dev);
|
||||
|
||||
//! Disable the peripheral clock
|
||||
void qspi_release(QSPIPort *dev);
|
||||
|
||||
//! Perform an indirect read operation
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param dummy_cycles How many cycles to wait before reading data
|
||||
//! @param buffer The buffer to read into
|
||||
//! @param length The number of bytes to read
|
||||
void qspi_indirect_read_no_addr(QSPIPort *dev, uint8_t instruction, uint8_t dummy_cycles,
|
||||
void *buffer, uint32_t length, bool is_ddr);
|
||||
|
||||
//! Perform an indirect read operation with an address
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param addr The address to read from
|
||||
//! @param dummy_cycles How many cycles to wait before reading data
|
||||
//! @param buffer The buffer to read into
|
||||
//! @param length The number of bytes to read
|
||||
void qspi_indirect_read(QSPIPort *dev, uint8_t instruction, uint32_t addr, uint8_t dummy_cycles,
|
||||
void *buffer, uint32_t length, bool is_ddr);
|
||||
|
||||
//! Performs an indirect read operation with DMA
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param start_addr The address to read from
|
||||
//! @param dummy_cycles How many cycles to wait before reading data
|
||||
//! @param buffer The buffer to read into
|
||||
//! @param length The number of bytes to read
|
||||
void qspi_indirect_read_dma(QSPIPort *dev, uint8_t instruction, uint32_t start_addr,
|
||||
uint8_t dummy_cycles, void *buffer, uint32_t length, bool is_ddr);
|
||||
|
||||
//! Perform an indirect write operation
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param buffer The buffer to write from or NULL if no data should be written
|
||||
//! @param length The number of bytes to write or 0 if no data should be written
|
||||
void qspi_indirect_write_no_addr(QSPIPort *dev, uint8_t instruction, const void *buffer,
|
||||
uint32_t length);
|
||||
|
||||
//! Perform an indirect write operation with an address
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param addr The address to write to
|
||||
//! @param buffer The buffer to write from or NULL if no data should be written
|
||||
//! @param length The number of bytes to write or 0 if no data should be written
|
||||
void qspi_indirect_write(QSPIPort *dev, uint8_t instruction, uint32_t addr, const void *buffer,
|
||||
uint32_t length);
|
||||
|
||||
//! Perform an indirect write operation in single SPI mode (not quad SPI)
|
||||
//! @param instruction The instruction to issue
|
||||
void qspi_indirect_write_no_addr_1line(QSPIPort *dev, uint8_t instruction);
|
||||
|
||||
//! Perform an automatic poll operation which will wait for the specified bits to be set/cleared
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param bit_mask The bit(s) to poll on (wait for)
|
||||
//! @param should_be_set Whether the bits should be set or cleared (true / false respectively)
|
||||
//! @param timeout_us The maximum amount of time to wait in us
|
||||
bool qspi_poll_bit(QSPIPort *dev, uint8_t instruction, uint8_t bit_mask, bool should_be_set,
|
||||
uint32_t timeout_us);
|
||||
|
||||
//! Puts the QSPI in memory-mapped mode
|
||||
//! @param instruction The instruction to issue
|
||||
//! @param addr address of data that will be accessed via memory mapping
|
||||
//! @param dummy_cycles How many cycles to wait before we can start reading the mapped memory
|
||||
//! @param length length of data that will be accessed via memory mapping
|
||||
void qspi_mmap_start(QSPIPort *dev, uint8_t instruction, uint32_t addr, uint8_t dummy_cycles,
|
||||
uint32_t length, bool is_ddr);
|
||||
|
||||
//! Aborts the memory-mapped mode
|
||||
void qspi_mmap_stop(QSPIPort *dev);
|
Loading…
Add table
Add a link
Reference in a new issue