143 lines
4.8 KiB
C
143 lines
4.8 KiB
C
/*
|
||
* 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: fpwm_hw.h
|
||
* Date: 2022-02-10 14:53:42
|
||
* LastEditTime: 2022-02-25 11:45:05
|
||
* Description: This files is for
|
||
*
|
||
* Modify History:
|
||
* Ver Who Date Changes
|
||
* ----- ------ -------- --------------------------------------
|
||
*/
|
||
|
||
#ifndef BSP_DRIVERS_FPWM_HW_H
|
||
#define BSP_DRIVERS_FPWM_HW_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif
|
||
|
||
#include "fkernel.h"
|
||
#include "ftypes.h"
|
||
#include "fio.h"
|
||
#include "fparameters.h"
|
||
|
||
/* pwm register definitions */
|
||
#define FPWM_BASE_ADR(n) ((FPWM_CONTROL_BASE)+(n<<12)) /* 0<=n<=7 */
|
||
|
||
#define FPWM0_BASE_ADR FPWM_BASE_ADR(0) /* PWM 0 base address */
|
||
#define FPWM1_BASE_ADR FPWM_BASE_ADR(1) /* PWM 1 base address */
|
||
#define FPWM2_BASE_ADR FPWM_BASE_ADR(2)
|
||
#define FPWM3_BASE_ADR FPWM_BASE_ADR(3)
|
||
#define FPWM4_BASE_ADR FPWM_BASE_ADR(4)
|
||
#define FPWM5_BASE_ADR FPWM_BASE_ADR(5)
|
||
#define FPWM6_BASE_ADR FPWM_BASE_ADR(6)
|
||
#define FPWM7_BASE_ADR FPWM_BASE_ADR(7)
|
||
|
||
/* DB register */
|
||
#define FPWM_DB_CTRL_OFFSET 0x00
|
||
#define FPWM_DB_DLY_OFFSET 0x04
|
||
#define FPWM_OFFSET 0x400
|
||
#define FPWM_TIM_CNT_OFFSET 0x00
|
||
#define FPWM_TIM_CTRL_OFFSET 0x04
|
||
#define FPWM_STATE_OFFSET 0x08
|
||
#define FPWM_PERIOD_OFFSET 0x0C
|
||
#define FPWM_CTRL_OFFSET 0x10
|
||
#define FPWM_CCR_OFFSET 0x14
|
||
|
||
#define FPWM_MODE_CHANNEL 2
|
||
#define FPWM_N(x) ((FPWM_OFFSET)*(x))
|
||
|
||
#define FPWM_RESET_TIMEOUT 10
|
||
|
||
#define NSEC_PER_SEC (1000000000ULL)
|
||
|
||
/* pwm db_ctrl field */
|
||
#define FPWM_DB_CTRL_RESET BIT(0)
|
||
#define FPWM_DB_CTRL_IN_MODE BIT(1)
|
||
#define FPWM_DB_CTRL_POLSEL(data) ((data) << 2)
|
||
#define FPWM_DB_CTRL_POLSEL_MASK GENMASK(3, 2)
|
||
#define FPWM_DB_CTRL_POLSEL_GET(data) ((data) >> 2)
|
||
#define FPWM_DB_CTRL_OUT_MODE(data) ((data) << 4)
|
||
#define FPWM_DB_CTRL_OUT_MODE_MASK GENMASK(5, 4)
|
||
#define FPWM_DB_CTRL_OUT_MODE_GET(data) ((data) >> 4)
|
||
|
||
/* pwm db_ctrl field */
|
||
#define FPWM_DB_DLY_MAX 1024
|
||
#define FPWM_DB_DLY_RISE_MASK GENMASK(9, 0)
|
||
#define FPWM_DB_DLY_FALL_MASK GENMASK(19, 10)
|
||
#define FPWM_DB_DLY_FALL(data) ((data) << 10)
|
||
#define FPWM_DB_DLY_FALL_GET(data) ((data) >> 10)
|
||
|
||
/* pwm tim_ctrl field */
|
||
#define FPWM_TIM_CTRL_DIV_MAX 4096
|
||
|
||
#define FPWM_TIM_CTRL_RESET BIT(0)
|
||
#define FPWM_TIM_CTRL_ENABLE BIT(1)
|
||
#define FPWM_TIM_CTRL_MODE_UD BIT(2) /* mode, modulo or up-and-down */
|
||
#define FPWM_TIM_CTRL_OVFIF_ENABLE BIT(4) /* counter-overflow intr enable */
|
||
#define FPWM_TIM_CTRL_GIE BIT(5) /* overall intr enable */
|
||
#define FPWM_TIM_CTRL_DIV(data) ((data) << 16)
|
||
#define FPWM_TIM_CTRL_DIV_MASK GENMASK(27, 16)
|
||
#define FPWM_TIM_CTRL_DIV_GET(data) ((data) >> 16)
|
||
|
||
/* pwm_state field */
|
||
#define FPWM_STATE_COUNTER_CLEAR BIT(0)
|
||
#define FPWM_STATE_OVFIF_COUNTER BIT(1)
|
||
#define FPWM_STATE_FIFO_EMPTY BIT(2)
|
||
#define FPWM_STATE_FIFO_FULL BIT(3)
|
||
|
||
/* pwm_period field */
|
||
#define FPWM_PERIOD_CCR_MASK GENMASK(15, 0)
|
||
|
||
/* pwm_ctrl field */
|
||
#define FPWM_CTRL_MODE_OUTPUT BIT(2)
|
||
#define FPWM_CTRL_INTR_COUNTER_ENABLE BIT(3)
|
||
#define FPWM_CTRL_CMP(data) ((data) << 4)
|
||
#define FPWM_CTRL_CMP_MASK GENMASK(6, 4)
|
||
#define FPWM_CTRL_CMP_GET(data) ((data) >> 4)
|
||
#define FPWM_CTRL_DUTY_SOURCE_FIFO BIT(8)
|
||
#define FPWM_CTRL_INTR_FIFO_EMPTY_ENABLE BIT(9)
|
||
|
||
/* pwm_ccr field */
|
||
#define FPWM_CCR_MASK GENMASK(15, 0)
|
||
|
||
/* pwm lsd cfg, lsd pwm sync control */
|
||
#define FLSD_MIO_PWM_SYN_OFFSET 0x20
|
||
#define FLSD_MIO_PWM_SYN_MASK GENMASK(7, 0)
|
||
|
||
/***************** Macros (Inline Functions) Definitions *********************/
|
||
|
||
/* 读FPWM寄存器 */
|
||
#define FPWM_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)reg_offset)
|
||
|
||
/* 写FPWM寄存器 */
|
||
#define FPWM_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)reg_offset, (u32)reg_value)
|
||
|
||
#define FPWM_SETBIT(base_addr, reg_offset, data) FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data))
|
||
|
||
#define FPWM_CLEARBIT(base_addr, reg_offset, data) FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data))
|
||
|
||
/* enable pwm lsd syn */
|
||
void FPwmLsdEnable(uintptr lsd_addr, u8 pwm_id);
|
||
|
||
/* disable pwm lsd syn */
|
||
void FPwmLsdDisable(uintptr lsd_addr, u8 pwm_id);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif |