2022-01-18 00:58:54 +08:00

184 lines
5.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*********************************************************************************************************************
* COPYRIGHT NOTICE
* Copyright (c) 2020,<2C><><EFBFBD>ɿƼ<C9BF>
* All rights reserved.
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QQȺ<51><C8BA><EFBFBD><EFBFBD>Ⱥ<EFBFBD><C8BA>824575535
*
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* @file eru
* @company <09>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* @author <09><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
* @version <09>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* @Software ADS v1.2.2
* @Target core TC264D
* @Taobao https://seekfree.taobao.com/
* @date 2020-3-23
********************************************************************************************************************/
#include "Src/Std/IfxSrc.h"
#include "SysSe/Bsp/Bsp.h"
#include "IfxScuEru.h"
#include "zf_assert.h"
#include "isr_config.h"
#include "zf_eru.h"
IfxScu_Req_In* eru_mux(ERU_PIN_enum eru_pin)
{
switch(eru_pin)
{
case ERU_CH0_REQ4_P10_7: return &IfxScu_REQ4_P10_7_IN;
case ERU_CH0_REQ0_P15_4: return &IfxScu_REQ0_P15_4_IN;
case ERU_CH1_REQ5_P10_8: return &IfxScu_REQ5_P10_8_IN;
case ERU_CH1_REQ10_P14_3: return &IfxScu_REQ10_P14_3_IN;
case ERU_CH2_REQ7_P00_4: return &IfxScu_REQ7_P00_4_IN;
case ERU_CH2_REQ14_P02_1: return &IfxScu_REQ14_P02_1_IN;
case ERU_CH2_REQ2_P10_2: return &IfxScu_REQ2_P10_2_IN;
case ERU_CH3_REQ6_P02_0: return &IfxScu_REQ6_P02_0_IN;
case ERU_CH3_REQ3_P10_3: return &IfxScu_REQ3_P10_3_IN;
case ERU_CH3_REQ15_P14_1: return &IfxScu_REQ15_P14_1_IN;
case ERU_CH4_REQ13_P15_5: return &IfxScu_REQ13_P15_5_IN;
case ERU_CH4_REQ8_P33_7: return &IfxScu_REQ8_P33_7_IN;
case ERU_CH5_REQ1_P15_8: return &IfxScu_REQ1_P15_8_IN;
case ERU_CH6_REQ12_P11_10: return &IfxScu_REQ12_P11_10_IN;
case ERU_CH6_REQ9_P20_0: return &IfxScu_REQ9_P20_0_IN;
case ERU_CH7_REQ16_P15_1: return &IfxScu_REQ16_P15_1_IN;
case ERU_CH7_REQ11_P20_9: return &IfxScu_REQ11_P20_9_IN;
default: ZF_ASSERT(FALSE); return NULL;
}
}
//-------------------------------------------------------------------------------------------------------------------
// @brief eru<72><75>ʼ<EFBFBD><CABC>(gpio<69>ж<EFBFBD>)
// @param eru_pin <20><><EFBFBD><EFBFBD>eruͨ<75><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// @param trigger <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʽ
// @return void
// Sample usage: eru_init(ERU_CH0_REQ0_P15_4, RISING);//eruͨ<75><CDA8>0 ʹ<><CAB9>P10_7<5F><37><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ж<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void eru_init(ERU_PIN_enum eru_pin, TRIGGER_enum trigger)
{
boolean interrupt_state = disableInterrupts();
IfxScu_Req_In *reqPin;
reqPin = eru_mux(eru_pin);
IfxScuEru_initReqPin(reqPin, IfxPort_InputMode_pullUp);
IfxScuEru_InputChannel inputChannel = (IfxScuEru_InputChannel)reqPin->channelId;
IfxScuEru_InputNodePointer triggerSelect = (IfxScuEru_InputNodePointer)(eru_pin/3);
IfxScuEru_OutputChannel outputChannel = (IfxScuEru_OutputChannel)(eru_pin/3);
switch(trigger)
{
case RISING:
{
IfxScuEru_disableFallingEdgeDetection(inputChannel);
IfxScuEru_enableRisingEdgeDetection(inputChannel);
}break;
case FALLING:
{
IfxScuEru_enableFallingEdgeDetection(inputChannel);
IfxScuEru_disableRisingEdgeDetection(inputChannel);
}break;
case BOTH:
{
IfxScuEru_enableFallingEdgeDetection(inputChannel);
IfxScuEru_enableRisingEdgeDetection(inputChannel);
}break;
default: ZF_ASSERT(FALSE);
}
IfxScuEru_enableTriggerPulse(inputChannel);
IfxScuEru_connectTrigger(inputChannel, triggerSelect);
IfxScuEru_setFlagPatternDetection(outputChannel, inputChannel, TRUE);
IfxScuEru_enablePatternDetectionTrigger(outputChannel);
IfxScuEru_setInterruptGatingPattern(outputChannel, IfxScuEru_InterruptGatingPattern_alwaysActive);
volatile Ifx_SRC_SRCR *src = &MODULE_SRC.SCU.SCU.ERU[(int)outputChannel % 4];
IfxSrc_Tos eru_service;
uint8 eru_priority;
switch((eru_pin/3)%4)
{
case 0:
{
eru_service = ERU_CH0_CH4_INT_SERVICE;
eru_priority = ERU_CH0_CH4_INT_PRIO;
}break;
case 1:
{
eru_service = ERU_CH1_CH5_INT_SERVICE;
eru_priority = ERU_CH1_CH5_INT_PRIO;
}break;
case 2:
{
eru_service = ERU_CH2_CH6_INT_SERVICE;
eru_priority = ERU_CH2_CH6_INT_PRIO;
}break;
case 3:
{
eru_service = ERU_CH3_CH7_INT_SERVICE;
eru_priority = ERU_CH3_CH7_INT_PRIO;
}break;
}
#pragma warning 507
IfxSrc_init(src, eru_service, eru_priority);
#pragma warning default
IfxSrc_enable(src);
restoreInterrupts(interrupt_state);
}
//-------------------------------------------------------------------------------------------------------------------
// @brief <20><><EFBFBD><EFBFBD>eru<72>ж<EFBFBD>
// @param eru_pin <20><><EFBFBD><EFBFBD>eruͨ<75><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// @return void
// Sample usage: eru_enable_interrupt(ERU_CH0_REQ0_P15_4);
//-------------------------------------------------------------------------------------------------------------------
void eru_enable_interrupt(ERU_PIN_enum eru_pin)
{
IfxScuEru_OutputChannel outputChannel = (IfxScuEru_OutputChannel)(eru_pin/3);
volatile Ifx_SRC_SRCR *src = &MODULE_SRC.SCU.SCU.ERU[(int)outputChannel % 4];
IfxSrc_enable(src);
}
//-------------------------------------------------------------------------------------------------------------------
// @brief <20>ر<EFBFBD>eru<72>ж<EFBFBD>
// @param eru_pin <20><><EFBFBD><EFBFBD>eruͨ<75><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// @return void
// Sample usage: eru_disable_interrupt(ERU_CH0_REQ0_P15_4);
//-------------------------------------------------------------------------------------------------------------------
void eru_disable_interrupt(ERU_PIN_enum eru_pin)
{
IfxScuEru_OutputChannel outputChannel = (IfxScuEru_OutputChannel)(eru_pin/3);
volatile Ifx_SRC_SRCR *src = &MODULE_SRC.SCU.SCU.ERU[(int)outputChannel % 4];
IfxSrc_disable(src);
}