1016 lines
24 KiB
C
Executable File
1016 lines
24 KiB
C
Executable File
// Copyright 2020-2021 Beken
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "scr_hw.h"
|
|
#include "scr_hal.h"
|
|
|
|
void scr_hal_soft_reset(void)
|
|
{
|
|
scr_ll_set_Global_CTRL_soft_rst(1);
|
|
}
|
|
|
|
void scr_hal_bypass_ckg(void)
|
|
{
|
|
scr_ll_set_Global_CTRL_bypass_ckg(1);
|
|
}
|
|
|
|
void scr_hal_set_ctrl(scr_ctrl_idx_t ctrl_idx, uint32_t enable)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (ctrl_idx) {
|
|
case BK_SCR_CTRL_INV_LEVEL:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_INVLEV_MASK << SCR_CTRL1_INVLEV_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_INVLEV_MASK << SCR_CTRL1_INVLEV_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_INV_ORD:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_INVORD_MASK << SCR_CTRL1_INVORD_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_INVORD_MASK << SCR_CTRL1_INVORD_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_PECH2FIFO:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_PECH2FIFO_MASK << SCR_CTRL1_PECH2FIFO_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_PECH2FIFO_MASK << SCR_CTRL1_PECH2FIFO_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_CLK_STOP:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_CLKSTOP_MASK << SCR_CTRL1_CLKSTOP_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_CLKSTOP_MASK << SCR_CTRL1_CLKSTOP_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_CLK_STOP_VAL:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_CLKSTOPVAL_MASK << SCR_CTRL1_CLKSTOPVAL_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_CLKSTOPVAL_MASK << SCR_CTRL1_CLKSTOPVAL_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_TX_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_TXEN_MASK << SCR_CTRL1_TXEN_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_TXEN_MASK << SCR_CTRL1_TXEN_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_RX_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_RXEN_MASK << SCR_CTRL1_RXEN_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_RXEN_MASK << SCR_CTRL1_RXEN_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_TS2FIFO:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_TS2FIFO_MASK << SCR_CTRL1_TS2FIFO_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_TS2FIFO_MASK << SCR_CTRL1_TS2FIFO_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_T0T1:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_T0T1_MASK << SCR_CTRL1_T0T1_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_T0T1_MASK << SCR_CTRL1_T0T1_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_ATR_START_FLUSH_FIFO:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_ATRSTFLUSH_MASK << SCR_CTRL1_ATRSTFLUSH_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_ATRSTFLUSH_MASK << SCR_CTRL1_ATRSTFLUSH_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_TCK_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_TCKEN_MASK << SCR_CTRL1_TCKEN_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_TCKEN_MASK << SCR_CTRL1_TCKEN_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_GLOBAL_INTR_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL1_GINTEN_MASK << SCR_CTRL1_GINTEN_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL1_GINTEN_MASK << SCR_CTRL1_GINTEN_POS);
|
|
}
|
|
scr_ll_set_CTRL1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_WARM_RST:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL2_WARMRST_MASK << SCR_CTRL2_WARMRST_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL2_WARMRST_MASK << SCR_CTRL2_WARMRST_POS);
|
|
}
|
|
scr_ll_set_CTRL2_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_ACT:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL2_ACT_MASK << SCR_CTRL2_ACT_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL2_ACT_MASK << SCR_CTRL2_ACT_POS);
|
|
}
|
|
scr_ll_set_CTRL2_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_DEACT:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL2_DEACT_MASK << SCR_CTRL2_DEACT_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL2_DEACT_MASK << SCR_CTRL2_DEACT_POS);
|
|
}
|
|
scr_ll_set_CTRL2_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_VCC:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL2_VCC30_MASK << SCR_CTRL2_VCC30_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL2_VCC30_MASK << SCR_CTRL2_VCC30_POS);
|
|
}
|
|
scr_ll_set_CTRL2_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_ACT_FAST:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
if (enable) {
|
|
reg |= (SCR_CTRL2_ACT_FAST_MASK << SCR_CTRL2_ACT_FAST_POS);
|
|
} else {
|
|
reg &= ~(SCR_CTRL2_ACT_FAST_MASK << SCR_CTRL2_ACT_FAST_POS);
|
|
}
|
|
scr_ll_set_CTRL2_value(reg);
|
|
break;
|
|
|
|
default:
|
|
scr_ll_set_CTRL1_value(enable & 0xFFFF);
|
|
scr_ll_set_CTRL2_value((enable >> 16) & 0x1FF);
|
|
break;
|
|
}
|
|
}
|
|
|
|
uint32_t scr_hal_get_ctrl(scr_ctrl_idx_t ctrl_idx)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (ctrl_idx) {
|
|
case BK_SCR_CTRL_INV_LEVEL:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_INVLEV_POS) & SCR_CTRL1_INVLEV_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_INV_ORD:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_INVORD_POS) & SCR_CTRL1_INVORD_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_PECH2FIFO:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_PECH2FIFO_POS) & SCR_CTRL1_PECH2FIFO_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_CLK_STOP:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_CLKSTOP_POS) & SCR_CTRL1_CLKSTOP_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_CLK_STOP_VAL:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_CLKSTOPVAL_POS) & SCR_CTRL1_CLKSTOPVAL_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_TX_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_TXEN_POS) & SCR_CTRL1_TXEN_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_RX_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_RXEN_POS) & SCR_CTRL1_RXEN_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_TS2FIFO:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_TS2FIFO_POS) & SCR_CTRL1_TS2FIFO_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_T0T1:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_T0T1_POS) & SCR_CTRL1_T0T1_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_ATR_START_FLUSH_FIFO:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_ATRSTFLUSH_POS) & SCR_CTRL1_ATRSTFLUSH_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_TCK_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_TCKEN_POS) & SCR_CTRL1_TCKEN_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_GLOBAL_INTR_EN:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg = ((reg >> SCR_CTRL1_GINTEN_POS) & SCR_CTRL1_GINTEN_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_WARM_RST:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
reg = ((reg >> SCR_CTRL2_WARMRST_POS) & SCR_CTRL2_WARMRST_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_ACT:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
reg = ((reg >> SCR_CTRL2_ACT_POS) & SCR_CTRL2_ACT_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_DEACT:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
reg = ((reg >> SCR_CTRL2_DEACT_POS) & SCR_CTRL2_DEACT_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_VCC:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
reg = ((reg >> SCR_CTRL2_VCC30_POS) & SCR_CTRL2_VCC30_MASK);
|
|
break;
|
|
|
|
case BK_SCR_CTRL_ACT_FAST:
|
|
reg = scr_ll_get_CTRL2_value();
|
|
reg = ((reg >> SCR_CTRL2_ACT_FAST_POS) & SCR_CTRL2_ACT_FAST_MASK);
|
|
break;
|
|
|
|
default:
|
|
reg = scr_ll_get_CTRL1_value();
|
|
reg |= (scr_ll_get_CTRL2_value() << 16);
|
|
break;
|
|
}
|
|
|
|
return reg;
|
|
}
|
|
|
|
void scr_hal_set_intr(scr_intr_idx_t intr_idx, uint32_t enable)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (intr_idx) {
|
|
case BK_SCR_INTR_TX_FIFO_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_TXFIDONE_MASK << SCR_INTEN1_TXFIDONE_POS);
|
|
}else {
|
|
reg &= ~(SCR_INTEN1_TXFIDONE_MASK << SCR_INTEN1_TXFIDONE_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_FIFO_EMPTY:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_TXFIEMPTY_MASK << SCR_INTEN1_TXFIEMPTY_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_TXFIEMPTY_MASK << SCR_INTEN1_TXFIEMPTY_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_FIFO_FULL:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_RXFIFULL_MASK << SCR_INTEN1_RXFIFULL_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_RXFIFULL_MASK << SCR_INTEN1_RXFIFULL_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_CLK_STOP_RUN:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_CLKSTOPRUN_MASK << SCR_INTEN1_CLKSTOPRUN_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_CLKSTOPRUN_MASK << SCR_INTEN1_CLKSTOPRUN_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_TXDONE_MASK << SCR_INTEN1_TXDONE_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_TXDONE_MASK << SCR_INTEN1_TXDONE_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_RXDONE_MASK << SCR_INTEN1_RXDONE_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_RXDONE_MASK << SCR_INTEN1_RXDONE_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_PERR:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_TXPERR_MASK << SCR_INTEN1_TXPERR_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_TXPERR_MASK << SCR_INTEN1_TXPERR_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_PERR:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_RXPERR_MASK << SCR_INTEN1_RXPERR_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_RXPERR_MASK << SCR_INTEN1_RXPERR_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_C2C_FULL:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_C2CFULL_MASK << SCR_INTEN1_C2CFULL_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_C2CFULL_MASK << SCR_INTEN1_C2CFULL_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_THD:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_RXTHRESHOLD_MASK << SCR_INTEN1_RXTHRESHOLD_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_RXTHRESHOLD_MASK << SCR_INTEN1_RXTHRESHOLD_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_FAIL:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_ATRFAIL_MASK << SCR_INTEN1_ATRFAIL_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_ATRFAIL_MASK << SCR_INTEN1_ATRFAIL_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_ATRDONE_MASK << SCR_INTEN1_ATRDONE_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_ATRDONE_MASK << SCR_INTEN1_ATRDONE_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_REM:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_SCREM_MASK << SCR_INTEN1_SCREM_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_SCREM_MASK << SCR_INTEN1_SCREM_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_INS:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_SCINS_MASK << SCR_INTEN1_SCINS_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_SCINS_MASK << SCR_INTEN1_SCINS_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_ACT:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_SCACT_MASK << SCR_INTEN1_SCACT_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_SCACT_MASK << SCR_INTEN1_SCACT_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_DEACT:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN1_SCDEACT_MASK << SCR_INTEN1_SCDEACT_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN1_SCDEACT_MASK << SCR_INTEN1_SCDEACT_POS);
|
|
}
|
|
scr_ll_set_INTEN1_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_THD:
|
|
reg = scr_ll_get_INTEN2_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN2_TXTHRESHOLD_MASK << SCR_INTEN2_TXTHRESHOLD_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN2_TXTHRESHOLD_MASK << SCR_INTEN2_TXTHRESHOLD_POS);
|
|
}
|
|
scr_ll_set_INTEN2_value(reg);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TCK_ERR:
|
|
reg = scr_ll_get_INTEN2_value();
|
|
if (enable) {
|
|
reg |= (SCR_INTEN2_TCKERR_MASK << SCR_INTEN2_TCKERR_POS);
|
|
} else {
|
|
reg &= ~(SCR_INTEN2_TCKERR_MASK << SCR_INTEN2_TCKERR_POS);
|
|
}
|
|
scr_ll_set_INTEN2_value(reg);
|
|
break;
|
|
|
|
default:
|
|
scr_ll_set_INTEN1_value(enable & 0xFFFF);
|
|
scr_ll_set_INTEN2_value((enable >> 16) & 0x3);
|
|
break;
|
|
}
|
|
}
|
|
|
|
uint32_t scr_hal_get_intr(scr_intr_idx_t intr_idx)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (intr_idx) {
|
|
case BK_SCR_INTR_TX_FIFO_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_TXFIDONE_POS) & SCR_INTEN1_TXFIDONE_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_FIFO_EMPTY:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_TXFIEMPTY_POS) & SCR_INTEN1_TXFIEMPTY_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_FIFO_FULL:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_RXFIFULL_POS) & SCR_INTEN1_RXFIFULL_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_CLK_STOP_RUN:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_CLKSTOPRUN_POS) & SCR_INTEN1_CLKSTOPRUN_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_TXDONE_POS) & SCR_INTEN1_TXDONE_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_RXDONE_POS) & SCR_INTEN1_RXDONE_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_PERR:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_TXPERR_POS) & SCR_INTEN1_TXPERR_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_PERR:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_RXPERR_POS) & SCR_INTEN1_RXPERR_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_C2C_FULL:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_C2CFULL_POS) & SCR_INTEN1_C2CFULL_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_THD:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_RXTHRESHOLD_POS) & SCR_INTEN1_RXTHRESHOLD_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_FAIL:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_ATRFAIL_POS) & SCR_INTEN1_ATRFAIL_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_DONE:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_ATRDONE_POS) & SCR_INTEN1_ATRDONE_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_REM:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_SCREM_POS) & SCR_INTEN1_SCREM_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_INS:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_SCINS_POS) & SCR_INTEN1_SCINS_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_ACT:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_SCACT_POS) & SCR_INTEN1_SCACT_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_DEACT:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg = ((reg >> SCR_INTEN1_SCDEACT_POS) & SCR_INTEN1_SCDEACT_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_THD:
|
|
reg = scr_ll_get_INTEN2_value();
|
|
reg = ((reg >> SCR_INTEN2_TXTHRESHOLD_POS) & SCR_INTEN2_TXTHRESHOLD_MASK);
|
|
break;
|
|
|
|
case BK_SCR_INTR_TCK_ERR:
|
|
reg = scr_ll_get_INTEN2_value();
|
|
reg = ((reg >> SCR_INTEN2_TCKERR_POS) & SCR_INTEN2_TCKERR_MASK);
|
|
break;
|
|
|
|
default:
|
|
reg = scr_ll_get_INTEN1_value();
|
|
reg |= (scr_ll_get_INTEN2_value() << 16);
|
|
break;
|
|
}
|
|
|
|
return reg;
|
|
}
|
|
|
|
|
|
uint32_t scr_hal_get_intr_status(scr_intr_idx_t intr_idx)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (intr_idx) {
|
|
case BK_SCR_INTR_TX_FIFO_DONE:
|
|
reg = scr_ll_get_INTSTAT1_txfidone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_FIFO_EMPTY:
|
|
reg = scr_ll_get_INTSTAT1_txfiempty();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_FIFO_FULL:
|
|
reg = scr_ll_get_INTSTAT1_rxfifull();
|
|
break;
|
|
|
|
case BK_SCR_INTR_CLK_STOP_RUN:
|
|
reg = scr_ll_get_INTSTAT1_clkstoprun();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_DONE:
|
|
reg = scr_ll_get_INTSTAT1_txdone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_DONE:
|
|
reg = scr_ll_get_INTSTAT1_rxdone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_C2C_FULL:
|
|
reg = scr_ll_get_INTSTAT1_c2cfull();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_THD:
|
|
reg = scr_ll_get_INTSTAT1_rxthreshold();
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_FAIL:
|
|
reg = scr_ll_get_INTSTAT1_atrfail();
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_DONE:
|
|
reg = scr_ll_get_INTSTAT1_atrdone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_ACT:
|
|
reg = scr_ll_get_INTSTAT1_scact();
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_DEACT:
|
|
reg = scr_ll_get_INTSTAT1_scdeact();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_THD:
|
|
reg = scr_ll_get_INTSTAT2_txthreshold();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TCK_ERR:
|
|
reg = scr_ll_get_INTSTAT2_tckerr();
|
|
break;
|
|
|
|
default:
|
|
reg = scr_ll_get_INTSTAT1_value();
|
|
reg |= (scr_ll_get_INTSTAT2_value() << 16);
|
|
break;
|
|
}
|
|
|
|
return reg;
|
|
}
|
|
|
|
void scr_hal_clr_intr_status(scr_intr_idx_t intr_idx)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (intr_idx) {
|
|
case BK_SCR_INTR_TX_FIFO_DONE:
|
|
scr_ll_set_INTSTAT1_txfidone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_FIFO_EMPTY:
|
|
scr_ll_set_INTSTAT1_txfiempty();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_FIFO_FULL:
|
|
scr_ll_set_INTSTAT1_rxfifull();
|
|
break;
|
|
|
|
case BK_SCR_INTR_CLK_STOP_RUN:
|
|
scr_ll_set_INTSTAT1_clkstoprun();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_DONE:
|
|
scr_ll_set_INTSTAT1_txdone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_DONE:
|
|
scr_ll_set_INTSTAT1_rxdone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_PERR:
|
|
scr_ll_set_INTSTAT1_txperr();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_PERR:
|
|
scr_ll_set_INTSTAT1_rxperr();
|
|
break;
|
|
|
|
case BK_SCR_INTR_C2C_FULL:
|
|
scr_ll_set_INTSTAT1_c2cfull();
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_THD:
|
|
scr_ll_set_INTSTAT1_rxthreshold();
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_FAIL:
|
|
scr_ll_set_INTSTAT1_atrfail();
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_DONE:
|
|
scr_ll_set_INTSTAT1_atrdone();
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_ACT:
|
|
scr_ll_set_INTSTAT1_scact();
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_DEACT:
|
|
scr_ll_set_INTSTAT1_scdeact();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_THD:
|
|
scr_ll_set_INTSTAT2_txthreshold();
|
|
break;
|
|
|
|
case BK_SCR_INTR_TCK_ERR:
|
|
scr_ll_set_INTSTAT2_tckerr();
|
|
break;
|
|
|
|
default:
|
|
reg = scr_ll_get_INTSTAT1_value();
|
|
scr_ll_set_INTSTAT1_value(reg);
|
|
reg = scr_ll_get_INTSTAT2_value();
|
|
scr_ll_set_INTSTAT2_value(reg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
uint32_t scr_hal_check_intr_status(scr_intr_idx_t intr_idx, uint32_t intr_status)
|
|
{
|
|
uint32_t reg;
|
|
|
|
switch (intr_idx) {
|
|
case BK_SCR_INTR_TX_FIFO_DONE:
|
|
reg = (intr_status >> SCR_INTSTAT1_TXFIDONE_POS) & SCR_INTSTAT1_TXFIDONE_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_FIFO_EMPTY:
|
|
reg = (intr_status >> SCR_INTSTAT1_TXFIEMPTY_POS) & SCR_INTSTAT1_TXFIEMPTY_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_FIFO_FULL:
|
|
reg = (intr_status >> SCR_INTSTAT1_RXFIFULL_POS) & SCR_INTSTAT1_RXFIFULL_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_CLK_STOP_RUN:
|
|
reg = (intr_status >> SCR_INTSTAT1_CLKSTOPRUN_POS) & SCR_INTSTAT1_CLKSTOPRUN_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_DONE:
|
|
reg = (intr_status >> SCR_INTSTAT1_TXDONE_POS) & SCR_INTSTAT1_TXDONE_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_DONE:
|
|
reg = (intr_status >> SCR_INTSTAT1_RXDONE_POS) & SCR_INTSTAT1_RXDONE_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_PERR:
|
|
reg = (intr_status >> SCR_INTSTAT1_TXPERR_POS) & SCR_INTSTAT1_TXPERR_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_PERR:
|
|
reg = (intr_status >> SCR_INTSTAT1_RXPERR_POS) & SCR_INTSTAT1_RXPERR_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_C2C_FULL:
|
|
reg = (intr_status >> SCR_INTSTAT1_C2CFULL_POS) & SCR_INTSTAT1_C2CFULL_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_RX_THD:
|
|
reg = (intr_status >> SCR_INTSTAT1_RXTHRESHOLD_POS) & SCR_INTSTAT1_RXTHRESHOLD_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_FAIL:
|
|
reg = (intr_status >> SCR_INTSTAT1_ATRFAIL_POS) & SCR_INTSTAT1_ATRFAIL_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_ATR_DONE:
|
|
reg = (intr_status >> SCR_INTSTAT1_ATRDONE_POS) & SCR_INTSTAT1_ATRDONE_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_REM:
|
|
reg = (intr_status >> SCR_INTSTAT1_SCREM_POS) & SCR_INTSTAT1_SCREM_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_INS:
|
|
reg = (intr_status >> SCR_INTSTAT1_SCINS_POS) & SCR_INTSTAT1_SCINS_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_ACT:
|
|
reg = (intr_status >> SCR_INTSTAT1_SCACT_POS) & SCR_INTSTAT1_SCACT_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_SC_DEACT:
|
|
reg = (intr_status >> SCR_INTSTAT1_SCDEACT_POS) & SCR_INTSTAT1_SCDEACT_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_TX_THD:
|
|
reg = (intr_status >> SCR_INTSTAT2_TXTHRESHOLD_POS) & SCR_INTSTAT2_TXTHRESHOLD_MASK;
|
|
break;
|
|
|
|
case BK_SCR_INTR_TCK_ERR:
|
|
reg = (intr_status >> SCR_INTSTAT2_TCKERR_POS) & SCR_INTSTAT2_TCKERR_MASK;
|
|
break;
|
|
|
|
default:
|
|
reg = 0;
|
|
break;
|
|
}
|
|
|
|
return reg;
|
|
}
|
|
|
|
/** FIFOCTRL start*/
|
|
uint32_t scr_hal_get_tx_fifo_empty(void)
|
|
{
|
|
return scr_ll_get_FIFOCTRL_txfiempty();
|
|
}
|
|
|
|
uint32_t scr_hal_get_tx_fifo_full(void)
|
|
{
|
|
return scr_ll_get_FIFOCTRL_txfifull();
|
|
}
|
|
|
|
void scr_hal_set_tx_fifo_flush(void)
|
|
{
|
|
scr_ll_set_FIFOCTRL_txfiflush(1);
|
|
}
|
|
|
|
uint32_t scr_hal_get_rx_fifo_empty(void)
|
|
{
|
|
return scr_ll_get_FIFOCTRL_rxfiempty();
|
|
}
|
|
|
|
uint32_t scr_hal_get_rx_fifo_full(void)
|
|
{
|
|
return scr_ll_get_FIFOCTRL_rxfifull();
|
|
}
|
|
|
|
void scr_hal_set_rx_fifo_flush(void)
|
|
{
|
|
scr_ll_set_FIFOCTRL_rxfiflush(1);
|
|
}
|
|
/** FIFOCTRL end*/
|
|
|
|
void scr_hal_set_rx_fifo_threshold(uint32_t value)
|
|
{
|
|
scr_ll_set_RX_FIFO_Threshold_rx_fifo_thd(value & 0xFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_rx_fifo_threshold(void)
|
|
{
|
|
return (scr_ll_get_RX_FIFO_Threshold_rx_fifo_thd() & 0xFF);
|
|
}
|
|
|
|
void scr_hal_set_tx_fifo_threshold(uint32_t value)
|
|
{
|
|
scr_ll_set_TX_FIFO_Threshold_tx_fifo_thd(value & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_tx_fifo_threshold(void)
|
|
{
|
|
return (scr_ll_get_TX_FIFO_Threshold_tx_fifo_thd() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_tx_repeat(uint32_t value)
|
|
{
|
|
scr_ll_set_TX_Repeat_tx_repeat(value & 0xF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_tx_repeat(void)
|
|
{
|
|
return (scr_ll_get_TX_Repeat_tx_repeat() & 0xF);
|
|
}
|
|
|
|
void scr_hal_set_rx_repeat(uint32_t value)
|
|
{
|
|
scr_ll_set_TX_Repeat_rx_repeat(value & 0xF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_rx_repeat(void)
|
|
{
|
|
return (scr_ll_get_TX_Repeat_rx_repeat() & 0xF);
|
|
}
|
|
|
|
void scr_hal_set_smart_card_clock_divisor(uint32_t value)
|
|
{
|
|
scr_ll_set_Smart_Card_Clock_Divisor_smart_card_clk_div(value & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_smart_card_clock_divisor(void)
|
|
{
|
|
return (scr_ll_get_Smart_Card_Clock_Divisor_smart_card_clk_div() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_baud_clock_divisor(uint32_t value)
|
|
{
|
|
scr_ll_set_Baud_Clock_Divisor_band_clk_div(value & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_baud_clock_divisor(void)
|
|
{
|
|
return (scr_ll_get_Baud_Clock_Divisor_band_clk_div() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_smart_card_guardtime(uint32_t value)
|
|
{
|
|
scr_ll_set_Smart_Card_Guardtime_smart_card_guardtime(value & 0xFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_smart_card_guardtime(void)
|
|
{
|
|
return (scr_ll_get_Smart_Card_Guardtime_smart_card_guardtime() & 0xFF);
|
|
}
|
|
|
|
void scr_hal_set_active_deactive_time(uint32_t value)
|
|
{
|
|
scr_ll_set_Activation_Deactivation_Time_activation_time(value & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_active_deactive_time(void)
|
|
{
|
|
return (scr_ll_get_Activation_Deactivation_Time_activation_time() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_reset_duration(uint32_t value)
|
|
{
|
|
scr_ll_set_Reset_Duration_reset_duration(value & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_reset_duration(void)
|
|
{
|
|
return (scr_ll_get_Reset_Duration_reset_duration() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_ATR_start_limit(uint32_t value)
|
|
{
|
|
scr_ll_set_ATR_Start_Limit_atr_start_limit(value & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_ATR_start_limit(void)
|
|
{
|
|
return (scr_ll_get_ATR_Start_Limit_atr_start_limit() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_two_char_delay_limit(uint32_t value)
|
|
{
|
|
scr_ll_set_Two_Characters_Delay_Limit_L_two_char_delay_limit_l(value & 0xFFFF);
|
|
scr_ll_set_Two_Characters_Delay_Limit_H_two_char_delay_limit_h((value >> 16) & 0xFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_two_char_delay_limit(void)
|
|
{
|
|
uint32_t reg;
|
|
|
|
reg = scr_ll_get_Two_Characters_Delay_Limit_L_two_char_delay_limit_l() & 0xFFFF;
|
|
reg |= ((scr_ll_get_Two_Characters_Delay_Limit_H_two_char_delay_limit_h() & 0xFF) << 16);
|
|
|
|
return reg;
|
|
}
|
|
|
|
uint32_t scr_hal_get_tx_fifo_counter(void)
|
|
{
|
|
return (scr_ll_get_TX_FIFO_Counter_tx_fifo_cnt() & 0xFFFF);
|
|
}
|
|
|
|
uint32_t scr_hal_get_rx_fifo_counter(void)
|
|
{
|
|
return (scr_ll_get_RX_FIFO_Counter_rx_fifo_cnt() & 0xFFFF);
|
|
}
|
|
|
|
void scr_hal_set_baud_tune(uint32_t value)
|
|
{
|
|
scr_ll_set_Baud_Tune_Register_baud_tune_reg(value & 0x7);
|
|
}
|
|
|
|
uint32_t scr_hal_get_baud_tune(void)
|
|
{
|
|
return (scr_ll_get_Baud_Tune_Register_baud_tune_reg() & 0x7);
|
|
}
|
|
|
|
uint32_t scr_hal_get_fifo_data(void)
|
|
{
|
|
return scr_ll_get_FIFO_fifo();
|
|
}
|
|
|
|
void scr_hal_set_fifo_data(uint32_t data)
|
|
{
|
|
scr_ll_set_FIFO_fifo(data);
|
|
}
|