embedded

package
v0.0.0-...-26c3e66 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2020 License: BSD-3-Clause Imports: 6 Imported by: 0

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

View Source
const (
	GPIO1_BASE = 0x209C000
	GPIO2_BASE = 0x20A0000
	GPIO3_BASE = 0x20A4000
	GPIO4_BASE = 0x20A8000
	GPIO5_BASE = 0x20AC000
	GPIO6_BASE = 0x20B0000
	GPIO7_BASE = 0x20B4000
)
View Source
const (
	INTR_LOW     = 0
	INTR_HIGH    = 1
	INTR_RISING  = 2
	INTR_FALLING = 3
)

/user api

View Source
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

View Source
const (
	CARD_SD   = 0
	CARD_MMC  = 1
	CARD_ESD  = 2
	CARD_EMMC = 3
)

sd card type

View Source
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

View Source
const (
	IDLE  = 0
	READY = 1
	IDENT = 2
	STBY  = 3
	TRAN  = 4
	DATA  = 5
	RCV   = 6
	PRG   = 7
	DIS   = 8
)

states

View Source
const (
	USDHC_PORT1        = 0
	USDHC_PORT2        = 1
	USDHC_PORT3        = 2
	USDHC_PORT4        = 3
	USDHC_NUMBER_PORTS = 4
)
View Source
const (
	WRITE      = 0
	READ       = 1
	SD_COMMAND = 2
)
View Source
const (
	RESPONSE_NONE          = 0
	RESPONSE_136           = 1
	RESPONSE_48            = 2
	RESPONSE_48_CHECK_BUSY = 3
)
View Source
const (
	DATA_PRESENT_NONE = 0
	DATA_PRESENT      = 1
)
View Source
const (
	DISABLE = 0
	ENABLE  = 1
)
View Source
const (
	SINGLE   = 0
	MULTIPLE = 1
)
View Source
const (
	INTR_BUSY  = 0
	INTR_TC    = 1
	INTR_ERROR = 2
)

interrupt status

View Source
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
)
View Source
const (
	REGS_USDHC1_BASE = 0x02190000
	REGS_USDHC2_BASE = 0x02194000
	REGS_USDHC3_BASE = 0x02198000
	REGS_USDHC4_BASE = 0x0219C000
)

sdcard regs base

View Source
const (
	USDHC_ADMA_BUFFER1 = 0x00907000
	USDHC_ADMA_BUFFER2 = 0x00908000
	USDHC_ADMA_BUFFER3 = 0x00909000
	USDHC_ADMA_BUFFER4 = 0x0090A000
)
View Source
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

View Source
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

View Source
const (
	READ_MASK = 0xFF
	RRDY      = 1 << 9
)
View Source
const ATTR_DIRECTORY = 0x1 << 4
View Source
const ATTR_LFN = 0xF
View Source
const BLKSIZE = 512
View Source
const EOC = 0x0FFFFFF8
View Source
const FAT_TYPE = 0xb
View Source
const MBR_MAGIC = 0xAA55
View Source
const MPCOREBASE uint32 = 0xa00000
View Source
const SDHC_ADMA_mode = 0

Variables

View Source
var IOMUX_GPIO1 = ((*uint32)(unsafe.Pointer((uintptr(0x20E0224)))))
View Source
var IOMUX_MUX_CTL_DISP0_DAT8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0190))))
View Source
var IOMUX_MUX_CTL_DISP0_DAT9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0194))))
View Source
var IOMUX_MUX_CTL_EIM_BCLK = ((*uint32)(unsafe.Pointer(uintptr(0x20E0158))))
View Source
var IOMUX_MUX_CTL_EIM_D16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0090))))
View Source
var IOMUX_MUX_CTL_EIM_D17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0094))))

SPI1

View Source
var IOMUX_MUX_CTL_EIM_D18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0098))))
View Source
var IOMUX_MUX_CTL_EIM_D26 = ((*uint32)(unsafe.Pointer(uintptr(0x20E00BC))))
View Source
var IOMUX_MUX_CTL_EIM_D27 = ((*uint32)(unsafe.Pointer(uintptr(0x20E00C0))))
View Source
var IOMUX_MUX_CTL_EIM_DA11 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0140))))
View Source
var IOMUX_MUX_CTL_EIM_EB2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E008C))))
View Source
var IOMUX_MUX_CTL_ENET_RX_ER = ((*uint32)(unsafe.Pointer(uintptr(0x20E01D8))))
View Source
var IOMUX_MUX_CTL_GPIO0 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0220))))

gpios

View Source
var IOMUX_MUX_CTL_GPIO1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0224))))
View Source
var IOMUX_MUX_CTL_GPIO16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0248))))
View Source
var IOMUX_MUX_CTL_GPIO17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E024C))))
View Source
var IOMUX_MUX_CTL_GPIO18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0250))))
View Source
var IOMUX_MUX_CTL_GPIO19 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0254))))
View Source
var IOMUX_MUX_CTL_GPIO2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0234))))
View Source
var IOMUX_MUX_CTL_GPIO3 = ((*uint32)(unsafe.Pointer(uintptr(0x20E022C))))
View Source
var IOMUX_MUX_CTL_GPIO4 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0238))))
View Source
var IOMUX_MUX_CTL_GPIO5 = ((*uint32)(unsafe.Pointer(uintptr(0x20E023C))))
View Source
var IOMUX_MUX_CTL_GPIO6 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0230))))
View Source
var IOMUX_MUX_CTL_GPIO7 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0240))))
View Source
var IOMUX_MUX_CTL_GPIO8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0244))))
View Source
var IOMUX_MUX_CTL_GPIO9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0228))))
View Source
var IOMUX_MUX_CTL_KEY_COL2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0208))))
View Source
var IOMUX_MUX_CTL_SD3_RST = ((*uint32)(unsafe.Pointer(uintptr(0x20E02D0))))
View Source
var IOMUX_MUX_CTL_SD4_DATA1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0320))))

PWM

View Source
var IOMUX_MUX_CTL_SD4_DATA2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0324))))
View Source
var IOMUX_PAD_CTL_DISP0_DAT8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E04A4))))
View Source
var IOMUX_PAD_CTL_DISP0_DAT9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E04A8))))
View Source
var IOMUX_PAD_CTL_EIM_BCLK = ((*uint32)(unsafe.Pointer(uintptr(0x20E046C))))
View Source
var IOMUX_PAD_CTL_EIM_D16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03A4))))
View Source
var IOMUX_PAD_CTL_EIM_D17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03A8))))
View Source
var IOMUX_PAD_CTL_EIM_D18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03AC))))
View Source
var IOMUX_PAD_CTL_EIM_D26 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03D0))))
View Source
var IOMUX_PAD_CTL_EIM_D27 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03D4))))
View Source
var IOMUX_PAD_CTL_EIM_DA11 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0454))))
View Source
var IOMUX_PAD_CTL_EIM_EB2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E03A0))))
View Source
var IOMUX_PAD_CTL_ENET_RX_ER = ((*uint32)(unsafe.Pointer(uintptr(0x20E04EC))))
View Source
var IOMUX_PAD_CTL_GPIO0 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05F0))))
View Source
var IOMUX_PAD_CTL_GPIO1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05F4))))
View Source
var IOMUX_PAD_CTL_GPIO16 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0618))))
View Source
var IOMUX_PAD_CTL_GPIO17 = ((*uint32)(unsafe.Pointer(uintptr(0x20E061C))))
View Source
var IOMUX_PAD_CTL_GPIO18 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0620))))
View Source
var IOMUX_PAD_CTL_GPIO19 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0624))))
View Source
var IOMUX_PAD_CTL_GPIO2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0604))))
View Source
var IOMUX_PAD_CTL_GPIO3 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05FC))))
View Source
var IOMUX_PAD_CTL_GPIO4 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0608))))
View Source
var IOMUX_PAD_CTL_GPIO5 = ((*uint32)(unsafe.Pointer(uintptr(0x20E060C))))
View Source
var IOMUX_PAD_CTL_GPIO6 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0600))))
View Source
var IOMUX_PAD_CTL_GPIO7 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0610))))
View Source
var IOMUX_PAD_CTL_GPIO8 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0614))))
View Source
var IOMUX_PAD_CTL_GPIO9 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05F8))))
View Source
var IOMUX_PAD_CTL_KEY_COL2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E05D8))))
View Source
var IOMUX_PAD_CTL_SD3_RST = ((*uint32)(unsafe.Pointer(uintptr(0x20E06B8))))
View Source
var IOMUX_PAD_CTL_SD4_DATA1 = ((*uint32)(unsafe.Pointer(uintptr(0x20E0708))))
View Source
var IOMUX_PAD_CTL_SD4_DATA2 = ((*uint32)(unsafe.Pointer(uintptr(0x20E070C))))
View Source
var IOMUX_SD1_CLK = ((*uint32)(unsafe.Pointer((uintptr(0x20E0350)))))
View Source
var IOMUX_SD1_CMD = ((*uint32)(unsafe.Pointer((uintptr(0x20E0348)))))
View Source
var IOMUX_SD1_DATA0 = ((*uint32)(unsafe.Pointer((uintptr(0x20E0340)))))
View Source
var IOMUX_SD1_DATA1 = ((*uint32)(unsafe.Pointer((uintptr(0x20E033C)))))
View Source
var IOMUX_SD1_DATA2 = ((*uint32)(unsafe.Pointer((uintptr(0x20E034C)))))
View Source
var IOMUX_SD1_DATA3 = ((*uint32)(unsafe.Pointer((uintptr(0x20E0344)))))
View Source
var WB_DEFAULT_UART = UART{((*UART_regs)(unsafe.Pointer(uintptr(0x2020000))))}
View Source
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}
View Source
var WB_JP4_12 = GPIO_pin{"JP4_12", 7, 8, gpios[7-1], IOMUX_MUX_CTL_SD3_RST, IOMUX_PAD_CTL_SD3_RST}
View Source
var WB_JP4_14 = GPIO_pin{"JP4_14", 3, 26, gpios[3-1], IOMUX_MUX_CTL_EIM_D26, IOMUX_PAD_CTL_EIM_D26}
View Source
var WB_JP4_4 = GPIO_pin{"JP4_4", 3, 11, gpios[3-1], IOMUX_MUX_CTL_EIM_DA11, IOMUX_PAD_CTL_EIM_DA11}
View Source
var WB_JP4_6 = GPIO_pin{"JP4_6", 3, 27, gpios[3-1], IOMUX_MUX_CTL_EIM_D27, IOMUX_PAD_CTL_EIM_D27}
View Source
var WB_JP4_8 = GPIO_pin{"JP4_8", 6, 31, gpios[6-1], IOMUX_MUX_CTL_EIM_BCLK, IOMUX_PAD_CTL_EIM_BCLK}

SPI clock is 59.2MHz

Functions

func Addtime

func Addtime(amt uint32)

func BitReverse32

func BitReverse32(x uint32) uint32

from the internet

func Busysleep

func Busysleep(sleeptime uint32) uint32

func ClearGPTIntr

func ClearGPTIntr()

func ClearIntr

func ClearIntr(gpiobank uint8)

func Clearjp4

func Clearjp4()

func Enable_interrupt

func Enable_interrupt(num uint32, cpunum uint32, priority uint8)

func Enable_interrupt_mask

func Enable_interrupt_mask(num uint32, cpumask uint8, priority uint8)

func Fat32_som_start

func Fat32_som_start(sdcard_init func() bool, reader_func readfunc) (bool, directory)

this returns an interface for navigating and modifying the directory structure

func GIC_init

func GIC_init(checks bool)

func GIC_mask_all

func GIC_mask_all()

func GIC_unmask_all

func GIC_unmask_all()

func GICcpumask

func GICcpumask(cpus []uint8) uint8

func GPIO_ISR

func GPIO_ISR(num uint32)

func GetPinNum

func GetPinNum(base, number uint32) uint32

converts the imx pin numbering into a linear number that I use and the registers use

func Gettime

func Gettime() uint32

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 MMC_SWITCH_SETBW_ARG(bus_width uint32) uint32

func Openabsolute

func Openabsolute(path string) (bool, []byte)

func Poll

func Poll(f Pollfunc, period time.Duration, sink chan interface{}) chan bool

func Read_board_sdcard

func Read_board_sdcard(length uint32, offset uint32) (bool, []byte)

/read length bytes at byte offset from the start of the sdcard

func Read_som_sdcard

func Read_som_sdcard(length uint32, offset uint32) (bool, []byte)

/read length bytes at byte offset from the start of the sdcard

func SWI

func SWI()

func Set

func Set(ptr unsafe.Pointer, val uint32)

func Setjp4

func Setjp4()

static functions for the toggle benchmark expand these if you want a static GPIO driver

func Sgi

func Sgi(num uint32, cpus uint32)

func Sleep

func Sleep(sleeptime uint32) uint32

func StartGPT

func StartGPT() bool

Types

type ADC_reading

type ADC_reading struct {
	Channel uint8
	Value   float32
}

type Counter

type Counter struct {
	// contains filtered or unexported fields
}

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

func (pin GPIO_pin) EnableIntr(mode uint8)

func (GPIO_pin) GetPinNum

func (pin GPIO_pin) GetPinNum() uint32

func (GPIO_pin) Read

func (pin GPIO_pin) Read() uint8

this is either hi or lo section 28.4.3.1

func (GPIO_pin) SetHI

func (pin GPIO_pin) SetHI()

directly set hi or lo

func (GPIO_pin) SetHInow

func (pin GPIO_pin) SetHInow()

directly set hi or lo without caring about the other pins

func (GPIO_pin) SetInput

func (pin GPIO_pin) SetInput()

section 28.4.3.1

func (GPIO_pin) SetLO

func (pin GPIO_pin) SetLO()

func (GPIO_pin) SetLOnow

func (pin GPIO_pin) SetLOnow()

func (GPIO_pin) SetOutput

func (pin GPIO_pin) SetOutput()

section 28.4.3.2

func (GPIO_pin) Write

func (pin GPIO_pin) Write(val uint8)

this is either hi or lo section 28.4.3.2

type GPT

type GPT struct {
	CR   uint32
	PR   uint32
	SR   uint32
	IR   uint32
	OCR1 uint32
	OCR2 uint32
	OCR3 uint32
	ICR1 uint32
	ICR2 uint32
	CNT  uint32
}

type MBR

type MBR struct {
	// contains filtered or unexported fields
}

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 PWM_pin

type PWM_pin struct {
	// contains filtered or unexported fields
}

type PWM_regs

type PWM_regs struct {
	CR  uint32
	SR  uint32
	IR  uint32
	SAR uint32
	PR  uint32
	CNR uint32
}

type Pollfunc

type Pollfunc func() interface{}

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

func (*SPI_periph) Send

func (spi *SPI_periph) Send(data uint32)

assumes datalength < 32bits

type SPI_pin

type SPI_pin struct {
	// contains filtered or unexported fields
}

either mosi, miso, sclk, or cs

type SPI_regs

type SPI_regs struct {
	// contains filtered or unexported fields
}

type UART

type UART struct {
	// contains filtered or unexported fields
}

func (*UART) Read

func (u *UART) Read(n int) []byte

type UART_regs

type UART_regs struct {
	// contains filtered or unexported fields
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL