Documentation
¶
Overview ¶
first fat32 implementation in Go?
* This entire damn driver was directly ported from the iMX6 bare metal sdk * for use in GERT
Index ¶
- Constants
- Variables
- func Addtime(amt uint32)
- func BitReverse32(x uint32) uint32
- func Busysleep(sleeptime uint32) uint32
- func ClearGPTIntr()
- func ClearIntr(gpiobank uint8)
- func Clearjp4()
- func Enable_interrupt(num uint32, cpunum uint32, priority uint8)
- func Enable_interrupt_mask(num uint32, cpumask uint8, priority uint8)
- func Fat32_som_start(sdcard_init func() bool, reader_func readfunc) (bool, directory)
- func GIC_init(checks bool)
- func GIC_mask_all()
- func GIC_unmask_all()
- func GICcpumask(cpus []uint8) uint8
- func GPIO_ISR(num uint32)
- func GetPinNum(base, number uint32) uint32
- func Gettime() uint32
- func Gopherwatch()
- func Init_board_sdcard() bool
- func Init_som_sdcard() bool
- func MMC_SWITCH_SETBW_ARG(bus_width uint32) uint32
- func Openabsolute(path string) (bool, []byte)
- func Poll(f Pollfunc, period time.Duration, sink chan interface{}) chan bool
- func Read_board_sdcard(length uint32, offset uint32) (bool, []byte)
- func Read_som_sdcard(length uint32, offset uint32) (bool, []byte)
- func SWI()
- func Set(ptr unsafe.Pointer, val uint32)
- func Setjp4()
- func Sgi(num uint32, cpus uint32)
- func Sleep(sleeptime uint32) uint32
- func StartGPT() bool
- type ADC_reading
- type Counter
- type GIC_cpu_map
- type GIC_distributor_map
- type GPIO_pin
- func (pin GPIO_pin) DisableIntr()
- func (pin GPIO_pin) EnableIntr(mode uint8)
- func (pin GPIO_pin) GetPinNum() uint32
- func (pin GPIO_pin) Read() uint8
- func (pin GPIO_pin) SetHI()
- func (pin GPIO_pin) SetHInow()
- func (pin GPIO_pin) SetInput()
- func (pin GPIO_pin) SetLO()
- func (pin GPIO_pin) SetLOnow()
- func (pin GPIO_pin) SetOutput()
- func (pin GPIO_pin) Write(val uint8)
- type GPT
- type MBR
- type MCP3008_controller
- type MCP4922_controller
- type MDD10A_controller
- type PWM_periph
- type PWM_pin
- type PWM_regs
- type Pollfunc
- type SPI_periph
- type SPI_pin
- type SPI_regs
- type UART
- type UART_regs
Constants ¶
const ( GPIO1_BASE = 0x209C000 GPIO2_BASE = 0x20A0000 GPIO3_BASE = 0x20A4000 GPIO4_BASE = 0x20A8000 GPIO5_BASE = 0x20AC000 GPIO6_BASE = 0x20B0000 GPIO7_BASE = 0x20B4000 )
const ( INTR_LOW = 0 INTR_HIGH = 1 INTR_RISING = 2 INTR_FALLING = 3 )
/user api
const ( PULLDOWN_100K = 0 PULLUP_47K = 1 PULLUP_100K = 2 PULLUP_22K = 3 DRIVE_HIZ = 0 DRIVE_260R = 1 DRIVE_130R = 2 DRIVE_90R = 3 DRIVE_60R = 4 DRIVE_50R = 5 DRIVE_40R = 6 DRIVE_33R = 7 SLEW_SLOW = 0 SLEW_FAST = 1 MUX_ALT0 = 0 MUX_ALT1 = 1 MUX_ALT2 = 2 MUX_ALT3 = 3 MUX_ALT4 = 4 MUX_ALT5 = 5 MUX_ALT6 = 6 MUX_ALT7 = 7 SPEED_LOW = 0 SPEED_MEDIUM = 1 SPEED_FAST = 3 )
this function applies to pins 4,6,8,10,12,14,16,18 on JP4 of the wandboard
const ( CARD_SD = 0 CARD_MMC = 1 CARD_ESD = 2 CARD_EMMC = 3 )
sd card type
const ( CMD0 = 0 CMD1 = 1 CMD2 = 2 CMD3 = 3 CMD5 = 5 CMD6 = 6 ACMD6 = 6 CMD7 = 7 CMD8 = 8 CMD9 = 9 CMD12 = 12 CMD13 = 13 CMD16 = 16 CMD17 = 17 CMD18 = 18 CMD24 = 24 CMD25 = 25 CMD26 = 26 CMD32 = 32 CMD33 = 33 CMD35 = 35 CMD36 = 36 CMD37 = 37 CMD38 = 38 CMD39 = 39 ACMD41 = 41 CMD43 = 43 ACMD51 = 51 CMD55 = 55 CMD60 = 60 CMD61 = 61 CMD62 = 62 )
commands
const ( IDLE = 0 READY = 1 IDENT = 2 STBY = 3 TRAN = 4 DATA = 5 RCV = 6 PRG = 7 DIS = 8 )
states
const ( USDHC_PORT1 = 0 USDHC_PORT2 = 1 USDHC_PORT3 = 2 USDHC_PORT4 = 3 USDHC_NUMBER_PORTS = 4 )
const ( WRITE = 0 READ = 1 SD_COMMAND = 2 )
const ( RESPONSE_NONE = 0 RESPONSE_136 = 1 RESPONSE_48 = 2 RESPONSE_48_CHECK_BUSY = 3 )
const ( DATA_PRESENT_NONE = 0 DATA_PRESENT = 1 )
const ( DISABLE = 0 ENABLE = 1 )
const ( SINGLE = 0 MULTIPLE = 1 )
const ( INTR_BUSY = 0 INTR_TC = 1 INTR_ERROR = 2 )
interrupt status
const ( OPERATING_FREQ = 0 IDENTIFICATION_FREQ = 1 HS_FREQ = 2 ESDHC_IDENT_DVS = 8 ESDHC_IDENT_SDCLKFS = 0x20 ESDHC_OPERT_DVS = 0x3 ESDHC_OPERT_SDCLKFS = 0x1 ESDHC_HS_DVS = 0x1 ESDHC_HS_SDCLKFS = 0x1 ESDHC_SYSCTL_DTOCV_VAL = 0xE )
const ( REGS_USDHC1_BASE = 0x02190000 REGS_USDHC2_BASE = 0x02194000 REGS_USDHC3_BASE = 0x02198000 REGS_USDHC4_BASE = 0x0219C000 )
sdcard regs base
const ( USDHC_ADMA_BUFFER1 = 0x00907000 USDHC_ADMA_BUFFER2 = 0x00908000 USDHC_ADMA_BUFFER3 = 0x00909000 USDHC_ADMA_BUFFER4 = 0x0090A000 )
const ( ESDHC_CLEAR_INTERRUPT = 0x117F01FF ESDHC_INTERRUPT_ENABLE = 0x007F013F ESDHC_STATUS_END_CMD_RESP_TIME_MSK = 0x100F0001 IMX_INT_USDHC1 = 54 IMX_INT_USDHC2 = 55 IMX_INT_USDHC3 = 56 IMX_INT_USDHC4 = 57 )
sdcard interrupts
const ( ESDHC_ONE_BIT_SUPPORT = 0x0 ESDHC_LITTLE_ENDIAN_MODE = 0x2 ESDHC_CIHB_CHK_COUNT = 10 ESDHC_CDIHB_CHK_COUNT = 100 BM_USDHC_PROT_CTRL_DMASEL = 0x00000300 ESDHC_MIXER_CTRL_CMD_MASK = 0xFFFFFFC0 BP_USDHC_MIX_CTRL_DMAEN = 0 BP_USDHC_MIX_CTRL_BCEN = 1 BP_USDHC_MIX_CTRL_AC12EN = 2 BP_USDHC_MIX_CTRL_DDR_EN = 3 BP_USDHC_MIX_CTRL_DTDSEL = 4 BP_USDHC_MIX_CTRL_MSBSEL = 5 BP_USDHC_CMD_XFR_TYP_RSPTYP = 16 BP_USDHC_CMD_XFR_TYP_CCCEN = 19 BP_USDHC_CMD_XFR_TYP_CICEN = 20 BP_USDHC_CMD_XFR_TYP_DPSEL = 21 BP_USDHC_CMD_XFR_TYP_CMDINX = 24 ESDHC_OPER_TIMEOUT_COUNT = 10000 SD_IF_CMD_ARG_COUNT = 2 SD_IF_HV_COND_ARG = 0x000001AA SD_IF_LV_COND_ARG = 0x000002AA SD_OCR_VALUE_HV_HC = 0x40ff8000 SD_OCR_VALUE_LV_HC = 0x40000080 SD_OCR_VALUE_HV_LC = 0x00ff8000 SD_OCR_VALUE_COUNT = 3 SD_VOLT_VALID_COUNT = 3000 CARD_BUSY_BIT = 0x80000000 SD_OCR_HC_RES = 0x40000000 SECT_MODE = 1 BYTE_MODE = 0 RCA_SHIFT = 16 SD_R1_STATUS_APP_CMD_MSK = 0x20 MMC_HV_HC_OCR_VALUE = 0x40FF8000 MMC_VOLT_VALID_COUNT = 3000 MMC_OCR_HC_BIT_MASK = 0x60000000 MMC_OCR_HC_RESP_VAL = 0x40000000 BLK_LEN = 512 ESDHC_FIFO_LENGTH = 0x80 ESDHC_BLKATTR_WML_BLOCK = 0x80 ESDHC_STATUS_END_DATA_RSP_TC_MASK = 0x00700002 )
sdcard randoms
const ( READ_MASK = 0xFF RRDY = 1 << 9 )
const ATTR_DIRECTORY = 0x1 << 4
const ATTR_LFN = 0xF
const BLKSIZE = 512
const EOC = 0x0FFFFFF8
const FAT_TYPE = 0xb
const MBR_MAGIC = 0xAA55
const MPCOREBASE uint32 = 0xa00000
const SDHC_ADMA_mode = 0
Variables ¶
var IOMUX_GPIO1 = ((*uint32)(unsafe.Pointer((uintptr(0x20E0224)))))
var IOMUX_MUX_CTL_DISP0_DAT8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0190))))
var IOMUX_MUX_CTL_DISP0_DAT9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0194))))
var IOMUX_MUX_CTL_EIM_BCLK = ((*uint32)(unsafe.Pointer(uintptr(0x20E0158))))
var IOMUX_MUX_CTL_EIM_D16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0090))))
var IOMUX_MUX_CTL_EIM_D17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0094))))
SPI1
var IOMUX_MUX_CTL_EIM_D18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0098))))
var IOMUX_MUX_CTL_EIM_D26 = ((*uint32)(unsafe.Pointer(uintptr(0x20E00BC))))
var IOMUX_MUX_CTL_EIM_D27 = ((*uint32)(unsafe.Pointer(uintptr(0x20E00C0))))
var IOMUX_MUX_CTL_EIM_DA11 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0140))))
var IOMUX_MUX_CTL_EIM_EB2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E008C))))
var IOMUX_MUX_CTL_ENET_RX_ER = ((*uint32)(unsafe.Pointer(uintptr(0x20E01D8))))
var IOMUX_MUX_CTL_GPIO0 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0220))))
gpios
var IOMUX_MUX_CTL_GPIO1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0224))))
var IOMUX_MUX_CTL_GPIO16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0248))))
var IOMUX_MUX_CTL_GPIO17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E024C))))
var IOMUX_MUX_CTL_GPIO18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0250))))
var IOMUX_MUX_CTL_GPIO19 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0254))))
var IOMUX_MUX_CTL_GPIO2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0234))))
var IOMUX_MUX_CTL_GPIO3 = ((*uint32)(unsafe.Pointer(uintptr(0x20E022C))))
var IOMUX_MUX_CTL_GPIO4 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0238))))
var IOMUX_MUX_CTL_GPIO5 = ((*uint32)(unsafe.Pointer(uintptr(0x20E023C))))
var IOMUX_MUX_CTL_GPIO6 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0230))))
var IOMUX_MUX_CTL_GPIO7 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0240))))
var IOMUX_MUX_CTL_GPIO8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0244))))
var IOMUX_MUX_CTL_GPIO9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0228))))
var IOMUX_MUX_CTL_KEY_COL2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0208))))
var IOMUX_MUX_CTL_SD3_RST = ((*uint32)(unsafe.Pointer(uintptr(0x20E02D0))))
var IOMUX_MUX_CTL_SD4_DATA1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0320))))
PWM
var IOMUX_MUX_CTL_SD4_DATA2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0324))))
var IOMUX_PAD_CTL_DISP0_DAT8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E04A4))))
var IOMUX_PAD_CTL_DISP0_DAT9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E04A8))))
var IOMUX_PAD_CTL_EIM_BCLK = ((*uint32)(unsafe.Pointer(uintptr(0x20E046C))))
var IOMUX_PAD_CTL_EIM_D16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03A4))))
var IOMUX_PAD_CTL_EIM_D17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03A8))))
var IOMUX_PAD_CTL_EIM_D18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03AC))))
var IOMUX_PAD_CTL_EIM_D26 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03D0))))
var IOMUX_PAD_CTL_EIM_D27 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03D4))))
var IOMUX_PAD_CTL_EIM_DA11 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0454))))
var IOMUX_PAD_CTL_EIM_EB2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03A0))))
var IOMUX_PAD_CTL_ENET_RX_ER = ((*uint32)(unsafe.Pointer(uintptr(0x20E04EC))))
var IOMUX_PAD_CTL_GPIO0 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05F0))))
var IOMUX_PAD_CTL_GPIO1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05F4))))
var IOMUX_PAD_CTL_GPIO16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0618))))
var IOMUX_PAD_CTL_GPIO17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E061C))))
var IOMUX_PAD_CTL_GPIO18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0620))))
var IOMUX_PAD_CTL_GPIO19 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0624))))
var IOMUX_PAD_CTL_GPIO2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0604))))
var IOMUX_PAD_CTL_GPIO3 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05FC))))
var IOMUX_PAD_CTL_GPIO4 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0608))))
var IOMUX_PAD_CTL_GPIO5 = ((*uint32)(unsafe.Pointer(uintptr(0x20E060C))))
var IOMUX_PAD_CTL_GPIO6 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0600))))
var IOMUX_PAD_CTL_GPIO7 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0610))))
var IOMUX_PAD_CTL_GPIO8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0614))))
var IOMUX_PAD_CTL_GPIO9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05F8))))
var IOMUX_PAD_CTL_KEY_COL2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05D8))))
var IOMUX_PAD_CTL_SD3_RST = ((*uint32)(unsafe.Pointer(uintptr(0x20E06B8))))
var IOMUX_PAD_CTL_SD4_DATA1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0708))))
var IOMUX_PAD_CTL_SD4_DATA2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E070C))))
var IOMUX_SD1_CLK = ((*uint32)(unsafe.Pointer((uintptr(0x20E0350)))))
var IOMUX_SD1_CMD = ((*uint32)(unsafe.Pointer((uintptr(0x20E0348)))))
var IOMUX_SD1_DATA0 = ((*uint32)(unsafe.Pointer((uintptr(0x20E0340)))))
var IOMUX_SD1_DATA1 = ((*uint32)(unsafe.Pointer((uintptr(0x20E033C)))))
var IOMUX_SD1_DATA2 = ((*uint32)(unsafe.Pointer((uintptr(0x20E034C)))))
var IOMUX_SD1_DATA3 = ((*uint32)(unsafe.Pointer((uintptr(0x20E0344)))))
var WB_JP4_10 = GPIO_pin{"JP4_10", 1, 24, gpios[1-1], IOMUX_MUX_CTL_ENET_RX_ER, IOMUX_PAD_CTL_ENET_RX_ER}
var WB_JP4_12 = GPIO_pin{"JP4_12", 7, 8, gpios[7-1], IOMUX_MUX_CTL_SD3_RST, IOMUX_PAD_CTL_SD3_RST}
var WB_JP4_14 = GPIO_pin{"JP4_14", 3, 26, gpios[3-1], IOMUX_MUX_CTL_EIM_D26, IOMUX_PAD_CTL_EIM_D26}
var WB_JP4_4 = GPIO_pin{"JP4_4", 3, 11, gpios[3-1], IOMUX_MUX_CTL_EIM_DA11, IOMUX_PAD_CTL_EIM_DA11}
var WB_JP4_6 = GPIO_pin{"JP4_6", 3, 27, gpios[3-1], IOMUX_MUX_CTL_EIM_D27, IOMUX_PAD_CTL_EIM_D27}
var WB_JP4_8 = GPIO_pin{"JP4_8", 6, 31, gpios[6-1], IOMUX_MUX_CTL_EIM_BCLK, IOMUX_PAD_CTL_EIM_BCLK}
var WB_PWM1 = PWM_periph{PWM_pin{"JP1_17", 2, IOMUX_MUX_CTL_DISP0_DAT8, IOMUX_PAD_CTL_DISP0_DAT8}, ((*PWM_regs)(unsafe.Pointer(uintptr(0x2080000)))), 0, 0.0}
var WB_PWM2 = PWM_periph{PWM_pin{"JP1_19", 2, IOMUX_MUX_CTL_DISP0_DAT9, IOMUX_PAD_CTL_DISP0_DAT9}, ((*PWM_regs)(unsafe.Pointer(uintptr(0x2084000)))), 0, 0.0}
var WB_PWM3 = PWM_periph{PWM_pin{"JP1_3", 2, IOMUX_MUX_CTL_SD4_DATA1, IOMUX_PAD_CTL_SD4_DATA1}, ((*PWM_regs)(unsafe.Pointer(uintptr(0x2088000)))), 0, 0.0}
var WB_SPI1 = SPI_periph{SPI_pin{"mosi", 1, IOMUX_MUX_CTL_EIM_D18, IOMUX_PAD_CTL_EIM_D18}, SPI_pin{"miso", 1, IOMUX_MUX_CTL_EIM_D17, IOMUX_PAD_CTL_EIM_D17}, SPI_pin{"sclk", 1, IOMUX_MUX_CTL_EIM_D16, IOMUX_PAD_CTL_EIM_D16}, []SPI_pin{ SPI_pin{"channel0", 1, IOMUX_MUX_CTL_EIM_EB2, IOMUX_PAD_CTL_EIM_EB2}, SPI_pin{"channel1", 0, IOMUX_MUX_CTL_KEY_COL2, IOMUX_PAD_CTL_KEY_COL2}, }, ((*SPI_regs)(unsafe.Pointer(uintptr(0x2008000)))), 0, 0, 0}
SPI clock is 59.2MHz
Functions ¶
func ClearGPTIntr ¶
func ClearGPTIntr()
func Enable_interrupt ¶
func Enable_interrupt_mask ¶
func Fat32_som_start ¶
this returns an interface for navigating and modifying the directory structure
func GIC_mask_all ¶
func GIC_mask_all()
func GIC_unmask_all ¶
func GIC_unmask_all()
func GICcpumask ¶
func GetPinNum ¶
converts the imx pin numbering into a linear number that I use and the registers use
func Gopherwatch ¶
func Gopherwatch()
func Init_board_sdcard ¶
func Init_board_sdcard() bool
init the board sdcard at port 1 with 4bit bus width
func Init_som_sdcard ¶
func Init_som_sdcard() bool
init the som sdcard at port 3 with 4bit bus width
func MMC_SWITCH_SETBW_ARG ¶
func Openabsolute ¶
func Read_board_sdcard ¶
/read length bytes at byte offset from the start of the sdcard
func Read_som_sdcard ¶
/read length bytes at byte offset from the start of the sdcard
Types ¶
type ADC_reading ¶
type GIC_cpu_map ¶
type GIC_cpu_map struct {
// contains filtered or unexported fields
}
type GIC_distributor_map ¶
type GIC_distributor_map struct {
// contains filtered or unexported fields
}
type GPIO_pin ¶
type GPIO_pin struct {
// contains filtered or unexported fields
}
* Turns out individual pins are complicated things in the iMX6. * Lets use go to make them easier to use
func (GPIO_pin) DisableIntr ¶
func (pin GPIO_pin) DisableIntr()
func (GPIO_pin) EnableIntr ¶
type MCP3008_controller ¶
type MCP3008_controller struct {
// contains filtered or unexported fields
}
func MakeMCP3008 ¶
func MakeMCP3008(spi SPI_periph) *MCP3008_controller
func (*MCP3008_controller) Read ¶
func (mcp *MCP3008_controller) Read(channel uint8) ADC_reading
type MCP4922_controller ¶
type MCP4922_controller struct {
// contains filtered or unexported fields
}
func MakeMCP4922 ¶
func MakeMCP4922(spi SPI_periph) MCP4922_controller
func (MCP4922_controller) Write ¶
func (m MCP4922_controller) Write(data uint16, channel uint8)
type MDD10A_controller ¶
type MDD10A_controller struct {
PWM1 PWM_periph
DIR1 GPIO_pin
PWM2 PWM_periph
DIR2 GPIO_pin
}
func MakeMDD10A ¶
func MakeMDD10A(pwm1, pwm2 PWM_periph, dir1, dir2 GPIO_pin) *MDD10A_controller
func (*MDD10A_controller) Backward ¶
func (c *MDD10A_controller) Backward(speed float32)
func (*MDD10A_controller) Forward ¶
func (c *MDD10A_controller) Forward(speed float32)
func (*MDD10A_controller) Stop ¶
func (c *MDD10A_controller) Stop()
func (*MDD10A_controller) TurnLeft ¶
func (c *MDD10A_controller) TurnLeft(speed float32)
func (*MDD10A_controller) TurnRight ¶
func (c *MDD10A_controller) TurnRight(speed float32)
type PWM_periph ¶
type PWM_periph struct {
// contains filtered or unexported fields
}
func (*PWM_periph) Begin ¶
func (pwm *PWM_periph) Begin(freq khz)
func (*PWM_periph) SetDuty ¶
func (pwm *PWM_periph) SetDuty(dutycycle float32)
func (*PWM_periph) SetFreq ¶
func (pwm *PWM_periph) SetFreq(freq khz)
func (*PWM_periph) Stop ¶
func (pwm *PWM_periph) Stop()
type SPI_periph ¶
type SPI_periph struct {
// contains filtered or unexported fields
}
func (*SPI_periph) Begin ¶
func (spi *SPI_periph) Begin(mode, freq, datalength, channel uint32)
the imx6 can support up to 2^12 bits in a single frame!
func (*SPI_periph) Exchange ¶
func (spi *SPI_periph) Exchange(data uint32) uint32
assumes datalength < 32 bits
type SPI_pin ¶
type SPI_pin struct {
// contains filtered or unexported fields
}
either mosi, miso, sclk, or cs