GpioT

ti.mcu.cc23xx/GpioT.em
import em from '@$$emscript'
export const $T = em.$declare('TEMPLATE')

export namespace em$template {

    export const $U = em.$declare('MODULE')

    export const pin_num = $config<i16>(-1)

    export namespace em$meta {

        export function pinId(): i16 {
            return pin_num.$$
        }
    }

    const pn = pin_num.$$
    const mask = 1 << pn

    export function clear(): void {
        $R.GPIO.DOUTCLR31_0.$$ = mask
    }

    export function functionSelect(select: u8): void {
        $R.IOC.IOC0.$[pn].$$ = select
    }

    export function get(): bool_t {
        return isInput() ? (($R.GPIO.DIN31_0.$$ & mask) != 0) : (($R.GPIO.DOUT31_0.$$ & mask) != 0)
    }

    export function isInput(): bool_t {
        return ($R.GPIO.DOE31_0.$$ & mask) == 0
    }

    export function isOutput(): bool_t {
        return ($R.GPIO.DOE31_0.$$ & mask) != 0
    }

    export function makeInput(): void {
        $R.GPIO.DOECLR31_0.$$ = mask
        $R.IOC.IOC0.$[pn].$$ |= $R.IOC_IOC0_INPEN

    }

    export function makeOutput(): void {
        $R.GPIO.DOESET31_0.$$ = mask
        $R.IOC.IOC0.$[pn].$$ &= ~$R.IOC_IOC0_INPEN
    }

    export function pinId(): i16 {
        return pn
    }

    export function reset(): void {
        $R.GPIO.DOECLR31_0.$$ = mask
        $R.IOC.IOC0.$[pn].$$ = 0
    }

    export function set(): void {
        $R.GPIO.DOUTSET31_0.$$ = mask
    }

    export function setInternalPulldown(enable: bool_t): void {
        if (enable) {
            $R.IOC.IOC0.$[pn].$$ |= $R.IOC_IOC0_PULLCTL_PULL_DOWN
        }
        else {
            $R.IOC.IOC0.$[pn].$$ &= ~$R.IOC_IOC0_PULLCTL_PULL_DOWN
        }
    }

    export function setInternalPullup(enable: bool_t): void {
        if (enable) {
            $R.IOC.IOC0.$[pn].$$ |= $R.IOC_IOC0_PULLCTL_PULL_UP
        }
        else {
            $R.IOC.IOC0.$[pn].$$ &= ~$R.IOC_IOC0_PULLCTL_PULL_UP
        }
    }

    export function toggle(): void {
        $R.GPIO.DOUTTGL31_0.$$ = mask
    }
}

export function $clone() { return { $T, ...em$template } }