2022-11-10 22:22:48 +08:00
|
|
|
|
/*
|
|
|
|
|
* Copyright : (C) 2022 Phytium Information Technology, Inc.
|
|
|
|
|
* All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* This program is OPEN SOURCE software: you can redistribute it and/or modify it
|
|
|
|
|
* under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
|
|
|
|
|
* either version 1.0 of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
|
|
|
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
* See the Phytium Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* FilePath: fmio_hw.h
|
|
|
|
|
* Date: 2022-06-20 21:05:34
|
|
|
|
|
* LastEditTime: 2022-06-20 21:05:34
|
2023-05-11 10:25:21 +08:00
|
|
|
|
* Description: This file is for mio hardware define
|
2022-11-10 22:22:48 +08:00
|
|
|
|
*
|
|
|
|
|
* Modify History:
|
|
|
|
|
* Ver Who Date Changes
|
|
|
|
|
* ----- ------ -------- --------------------------------------
|
2023-05-11 10:25:21 +08:00
|
|
|
|
* 1.0 liushengming 2022/06/20 init
|
2022-11-10 22:22:48 +08:00
|
|
|
|
*/
|
2023-05-11 10:25:21 +08:00
|
|
|
|
#ifndef FMIO_HW_H
|
|
|
|
|
#define FMIO_HW_H
|
2022-11-10 22:22:48 +08:00
|
|
|
|
|
|
|
|
|
#include "fparameters.h"
|
|
|
|
|
#include "fio.h"
|
|
|
|
|
#include "fkernel.h"
|
|
|
|
|
#include "fdebug.h"
|
|
|
|
|
#include "ferror_code.h"
|
|
|
|
|
|
2023-05-11 10:25:21 +08:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
|
|
|
|
|
2022-11-10 22:22:48 +08:00
|
|
|
|
|
|
|
|
|
/************************** Constant Definitions *****************************/
|
|
|
|
|
|
|
|
|
|
/** @name Register Map
|
|
|
|
|
*
|
|
|
|
|
* Register offsets from the base address of MIO device.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
#define FMIO_BASE_SET_ADDR(x) FMIO_BASE_ADDR(x)+0x1000
|
|
|
|
|
|
|
|
|
|
#define FMIO_FUNC_OFFSET 0x00
|
|
|
|
|
#define FMIO_SEL_STATE_OFFSET 0x04
|
|
|
|
|
#define FMIO_VER_OFFSET 0x100
|
|
|
|
|
|
|
|
|
|
/* creg_mio_func_sel */
|
|
|
|
|
#define FMIO_FUNC_SEL_MASK GENMASK(1,0)
|
|
|
|
|
#define FMIO_FUNC_SET(n) (FMIO_FUNC_SEL_MASK & (n))
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
FMIO_FUNC_SET_I2C = 0b00,
|
|
|
|
|
FMIO_FUNC_SET_UART = 0b01,
|
2023-05-11 10:25:21 +08:00
|
|
|
|
#if defined(TARDIGRADE)
|
|
|
|
|
FMIO_FUNC_SET_PWM = 0b10,
|
|
|
|
|
#endif
|
2022-11-10 22:22:48 +08:00
|
|
|
|
FMIO_NUM_OF_MIO_FUNC
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define FMIO_FUNC_STATE_MASK GENMASK(1, 0)
|
|
|
|
|
#define FMIO_VERSION_MASK GENMASK(31, 0)
|
|
|
|
|
|
|
|
|
|
/***************** Macros (Inline Functions) Definitions *********************/
|
|
|
|
|
/**
|
|
|
|
|
* @name: FMIO_READ_REG32
|
|
|
|
|
* @msg: 读取MIO寄存器
|
|
|
|
|
* @param {u32} addr MIO的基地址
|
|
|
|
|
* @param {u32} reg_offset MIO的寄存器的偏移
|
|
|
|
|
* @return {u32} 寄存器参数
|
|
|
|
|
*/
|
|
|
|
|
#define FMIO_READ_REG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @name: FMIO_WRITE_REG32
|
|
|
|
|
* @msg: 写入MIO寄存器
|
|
|
|
|
* @param {u32} addr MIO的基地址
|
|
|
|
|
* @param {u32} reg_offset MIO的寄存器的偏移
|
|
|
|
|
* @param {u32} reg_value 写入寄存器参数
|
|
|
|
|
* @return {void}
|
|
|
|
|
*/
|
|
|
|
|
#define FMIO_WRITE_REG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @name: FMioWriteFunc
|
|
|
|
|
* @msg: 设置MIO的功能
|
|
|
|
|
* @return {*}
|
|
|
|
|
* @param {uintptr} addr
|
|
|
|
|
* @param {u32} val
|
|
|
|
|
*/
|
|
|
|
|
static inline void FMioWriteFunc(uintptr addr, u32 val)
|
|
|
|
|
{
|
|
|
|
|
FMIO_WRITE_REG32(addr, FMIO_FUNC_OFFSET, val);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @name: FMioReadStatus
|
|
|
|
|
* @msg: 获取MIO的设置
|
|
|
|
|
* @return {u32} register value
|
|
|
|
|
* @param {uintptr} addr
|
|
|
|
|
*/
|
|
|
|
|
static inline u32 FMioReadStatus(uintptr addr)
|
|
|
|
|
{
|
|
|
|
|
return FMIO_READ_REG32(addr, FMIO_SEL_STATE_OFFSET) & FMIO_FUNC_STATE_MASK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @name: FMioReadVersion
|
|
|
|
|
* @msg: 获取MIO的版本信息
|
|
|
|
|
* @return {u32} register value
|
|
|
|
|
* @param {uintptr} addr
|
|
|
|
|
*/
|
|
|
|
|
static inline u32 FMioReadVersion(uintptr addr)
|
|
|
|
|
{
|
|
|
|
|
return FMIO_READ_REG32(addr, FMIO_VER_OFFSET) & FMIO_VERSION_MASK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/************************** Function Prototypes ******************************/
|
|
|
|
|
/*设置Mio功能*/
|
|
|
|
|
FError FMioSelectFunc(uintptr addr, u32 mio_type);
|
|
|
|
|
|
|
|
|
|
/*获取Mio状态*/
|
|
|
|
|
u32 FMioGetFunc(uintptr addr);
|
|
|
|
|
|
|
|
|
|
/*获取版本信息,默认32'h1*/
|
|
|
|
|
u32 FMioGetVersion(uintptr addr);
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|