2025-12-17 15:55:25 +08:00

110 lines
3.4 KiB
C

/* Copyright (c) 2020 Kneron, Inc. All Rights Reserved.
*
* The information contained herein is property of Kneron, Inc.
* Terms and conditions of usage are described in detail in Kneron
* STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information.
* NO WARRANTY of ANY KIND is provided. This heading must NOT be removed
* from the file.
*/
/******************************************************************************
* Filename:
* ---------
* kdrv_pinmux.c
*
* Project:
* --------
* KL520
*
* Description:
* ------------
* This is pinmux config driver
*
* Author:
* -------
* XXX
**
******************************************************************************/
/******************************************************************************
Head Block of The File
******************************************************************************/
/* Comment block of the file */
// Sec 1: Include File
#include <stdarg.h>
#include "kdrv_scu_ext.h"
#include "base.h"
#include "kdrv_pinmux.h"
// Sec 2: Constant Definitions, Imported Symbols, miscellaneous
/******************************************************************************
Declaration of External Variables & Functions
******************************************************************************/
// Sec 3: declaration of external variable
// Sec 4: declaration of external function prototype
/******************************************************************************
Declaration of data structure
******************************************************************************/
// Sec 5: structure, union, enum, linked list
/******************************************************************************
Declaration of Global Variables & Functions
******************************************************************************/
// Sec 6: declaration of global variable
// Sec 7: declaration of global function prototype
/******************************************************************************
Declaration of static Global Variables & Functions
******************************************************************************/
// Sec 8: declaration of static global variable
// Sec 9: declaration of static function prototype
/******************************************************************************
// Sec 10: C Functions
******************************************************************************/
void kdrv_pinmux_initialize(uint32_t num, uint32_t *p_array)
{
for(uint32_t i = 0; i < num; i++)
{
uint32_t reg_addr = SCU_EXTREG_SPI_WP_N_IOCTRL + (i * 4);
SET_MASKED_BITS(reg_addr, p_array[i], 0, 7)
}
}
void kdrv_pinmux_config(kdrv_pin_name pin, kdrv_pinmux_mode mode, kdrv_pin_pull pull_type, kdrv_pin_driving driving)
{
uint32_t reg_addr = SCU_EXTREG_SPI_WP_N_IOCTRL + (pin * 4);
uint32_t ioctrl_bits = 0;
/*Pinmux mode configure*/
ioctrl_bits |= mode;
/*Pull up, Pull down configure*/
if(pull_type == PIN_PULL_UP)
ioctrl_bits |= BIT3;
else if(pull_type == PIN_PULL_DOWN)
ioctrl_bits |= BIT4;
/*Output Driving configure*/
if(driving == PIN_DRIVING_8MA)
ioctrl_bits |= BIT6;
else if(driving == PIN_DRIVING_12MA)
ioctrl_bits |= BIT7;
else if(driving == PIN_DRIVING_16MA)
ioctrl_bits |= (BIT6 | BIT7);
SET_MASKED_BITS(reg_addr, ioctrl_bits, 0, 7)
}