📄 fct.c
字号:
#include "fct.h"
#include "Iomacros.h"
#include "ts.h"
#include "standard.h"
#include "icu.h"
#include "syt.h"
#include "speaker.h" //add by sky for test speaker
static Uint32 FCT_TASK_STACK[FCT_TASK_STACK_SIZE];
static tsTaskID FCT_TASK_ID=INVALIDTASK;
Sint32 VendorRequestQueue_id = INVALIDMSGQ;
Boolean Have_Panel_key_press = FALSE;
Boolean Turn_ON_USB11_test = FALSE;
unsigned char FCTMode;
unsigned char PanleState;
Bool_flag Timer4InitAlready;
Uint8 PinGroupForTimer4; //differ adf continue or adf run pluscounter setp or fb continue or adf fb pluscounter setp
Uint8 RespondData[14];
static Uint8 phase; //use to generate signal to driver step motor
Uint32 PlusCounter; //step motor run pluscounter setp,then stop
extern void PrinterDMATest(void);
void ChangePinOveylay(Uint8 GPIOPinNumber)
{
Uint32 TempVar1;
Uint32 TempVar2;
Uint32 TempVar3;
TempVar2=(GPIOPinNumber)/0x08;
TempVar3=GPIOPinNumber-TempVar2*0x08;
TempVar1=IO_READ32(PinOveylayRegAddressBase+TempVar2*0x04);
switch (TempVar3)
{
case 0x00:
TempVar1= TempVar1 & 0XFFFFFFF0;break;
case 0x01:
TempVar1= TempVar1 & 0XFFFFFF0f;break;
case 0x02:
TempVar1= TempVar1 & 0XFFFFF0ff;break;
case 0x03:
TempVar1= TempVar1 & 0XFFFF0Fff;break;
case 0x04:
TempVar1= TempVar1 & 0XFFF0FFff;break;
case 0x05:
TempVar1= TempVar1 & 0XFF0FFFff;break;
case 0x06:
TempVar1= TempVar1 & 0XF0FfFFff;break;
case 0x07:
TempVar1= TempVar1 & 0X0FFfFFff;break;
default: ;
}
IO_WRITE32(PinOveylayRegAddressBase+TempVar2*0x04, TempVar1);
}
void OveylayRecoverTOScap(Uint8 GPIOPinNumber)
{
Uint32 TempVar1;
Uint32 TempVar2;
Uint32 TempVar3;
TempVar2=(GPIOPinNumber)/0x08;
TempVar3=GPIOPinNumber-TempVar2*0x08;
TempVar1=IO_READ32(PinOveylayRegAddressBase+TempVar2*0x04);
switch (TempVar3)
{
case 0x00:
TempVar1= TempVar1 | 0X00000001;break;
case 0x01:
TempVar1= TempVar1 | 0X00000010;break;
case 0x02:
TempVar1= TempVar1 | 0X00000100;break;
case 0x03:
TempVar1= TempVar1 | 0X00001000;break;
case 0x04:
TempVar1= TempVar1 | 0X00010000;break;
case 0x05:
TempVar1= TempVar1 | 0X00100000;break;
case 0x06:
TempVar1= TempVar1 | 0X01000000;break;
case 0x07:
TempVar1= TempVar1 | 0X10000000;break;
default: ;
}
IO_WRITE32(PinOveylayRegAddressBase+TempVar2*0x04, TempVar1);
}
/****************************************************************
*DIR:=1,gpio input mode,mask=0; dir=0,gpio output mode,mask=1;
*
****************************************************************/
void ChangeDir_Mask(Uint8 GPIOPinNumber,Uint8 Dir)
{
Uint32 TempVar1;
Uint32 TempVar2;
Uint32 TempVar3;
TempVar1=GPIOPinNumber/32;
TempVar2=GPIOPinNumber-TempVar1*32;
TempVar3=0X00000001;
TempVar2=TempVar3<<TempVar2;
if (Dir)
{//input
//change pin dirmode to input
TempVar3=IO_READ32(PinDirRegAddressBase+TempVar1*0x04);
TempVar3=TempVar3 | TempVar2;
IO_WRITE32(PinDirRegAddressBase+TempVar1*0x04,TempVar3);
//change mask
TempVar3=IO_READ32(PinMaskRegAddressBase+TempVar1*0x04);
TempVar3=TempVar3 | TempVar2;
IO_WRITE32(PinMaskRegAddressBase+TempVar1*0x04, TempVar3);
}
else
{//output
//change mask
TempVar3=IO_READ32(PinMaskRegAddressBase+TempVar1*0x04);
TempVar3=TempVar3 | TempVar2;
IO_WRITE32(PinMaskRegAddressBase+TempVar1*0x04, TempVar3);
//change pin dirmode to output
TempVar3=IO_READ32(PinDirRegAddressBase+TempVar1*0x04);
TempVar2=~TempVar2;
TempVar3=TempVar3 & TempVar2;
IO_WRITE32(PinDirRegAddressBase+TempVar1*0x04,TempVar3);
}
}
void SetGpio_0(Uint8 GPIOPinNumber)
{
Uint32 TempVar1;
Uint32 TempVar2;
Uint32 TempVar3;
Uint32 TempVar4;
TempVar1=GPIOPinNumber/32;
TempVar2=GPIOPinNumber-TempVar1*32;
TempVar3=0X00000001;
TempVar2=TempVar3<<TempVar2;
TempVar3=IO_READ32(PinDataRegAddressBase+TempVar1*0x04);
TempVar4=IO_READ32(InvctlxRegisterAddressBase+TempVar1*0x04);
if (TempVar4 & TempVar2)
{
TempVar3=TempVar3 | TempVar2;
IO_WRITE32(PinDataRegAddressBase+TempVar1*0x04, TempVar3);
}
else
{
TempVar2=~TempVar2;
TempVar3=TempVar3 & TempVar2;
IO_WRITE32(PinDataRegAddressBase+TempVar1*0x04, TempVar3);
}
}
void SetGpio_1(Uint8 GPIOPinNumber)
{
Uint32 TempVar1;
Uint32 TempVar2;
Uint32 TempVar3;
Uint32 TempVar4;
TempVar1=GPIOPinNumber/32;
TempVar2=GPIOPinNumber-TempVar1*32;
TempVar3=0X00000001;
TempVar2=TempVar3<<TempVar2;
TempVar3=IO_READ32(PinDataRegAddressBase+TempVar1*0x04);
TempVar4=IO_READ32(InvctlxRegisterAddressBase+TempVar1*0x04);
if (TempVar4 & TempVar2)
{
TempVar2=~TempVar2;
TempVar3=TempVar3 & TempVar2;
IO_WRITE32(PinDataRegAddressBase+TempVar1*0x04, TempVar3);
}
else
{
TempVar3=TempVar3 | TempVar2;
IO_WRITE32(PinDataRegAddressBase+TempVar1*0x04, TempVar3);
}
}
Bool_flag ReadPinValue(Uint8 GPIOPinNumber)
{
Bool_flag PinValue;
Uint32 TempVar1;
Uint32 TempVar2;
Uint32 TempVar3;
Uint32 TempVar4;
TempVar1=GPIOPinNumber/32;
TempVar2=GPIOPinNumber-TempVar1*32;
TempVar3=0X00000001;
TempVar2=TempVar3<<TempVar2;
TempVar3=IO_READ32(PinDataRegAddressBase+TempVar1*0x04);
TempVar4=IO_READ32(InvctlxRegisterAddressBase+TempVar1*0x04);
if (TempVar4 & TempVar2)
{
if (TempVar3 & TempVar2)
{
PinValue=Value_0;
}
else
{
PinValue=Value_1;
}
}
else
{
if (TempVar3 & TempVar2)
{
PinValue=Value_1;
}
else
{
PinValue=Value_0;
}
}
return PinValue;
}
void FCTAction(void)
{
Msg VendorMsg;
SOUND_PROFILE *sound_parameter=(SOUND_PROFILE *)malloc(sizeof(sound_parameter));
while (1)
{
TASKMSGWAIT(VendorRequestQueue_id,&VendorMsg);
switch (VendorMsg.msg1)
{
case 0x01:
{
ChangePinOveylay(ADF_I01);
ChangePinOveylay(ADF_I02);
ChangePinOveylay(ADF_PH1);
ChangeDir_Mask(ADF_I01, PinDirOutput);
ChangeDir_Mask(ADF_I02, PinDirOutput);
ChangeDir_Mask(ADF_PH1,PinDirOutput);
ChangePinOveylay(ADF_I11);
ChangePinOveylay(ADF_I12);
ChangePinOveylay(ADF_PH2);
ChangeDir_Mask(ADF_I11, PinDirOutput);
ChangeDir_Mask(ADF_I12, PinDirOutput);
ChangeDir_Mask(ADF_PH2,PinDirOutput);
ChangePinOveylay(FB_OR_ADF_CS);
ChangeDir_Mask(FB_OR_ADF_CS,PinDirOutput);
SetGpio_0(FB_OR_ADF_CS);
SetGpio_1(ADF_I11);
SetGpio_1(ADF_I01);
SetGpio_1(ADF_I02);
SetGpio_1(ADF_I12);
IO_WRITE32(SYTCNT4, 0x20d44); //init the counter for restarting the timer4
IO_WRITE32(SYTTC4, 0x20d44);
if (Timer4InitAlready)
{
IO_WRITE32(SYTCTL4, 0x00000007);
}
else
{
SYT_Init(SYT_Timer4, 0x20d44, OS_Timer4LISR);
Timer4InitAlready=Value_1;
}
PinGroupForTimer4=0X03;
phase=0;
}break;
case 0x02:
{
IO_WRITE32(SYTCTL4, 0x00000005);
PinGroupForTimer4=0;
SetGpio_1(ADF_I01);
SetGpio_1(ADF_I02);
SetGpio_1(ADF_I11);
SetGpio_1(ADF_I12);
OveylayRecoverTOScap(ADF_I01);
OveylayRecoverTOScap(ADF_I02);
OveylayRecoverTOScap(ADF_I11);
OveylayRecoverTOScap(ADF_I12);
OveylayRecoverTOScap(ADF_PH1);
OveylayRecoverTOScap(ADF_PH2);
}break;
case 0x03:
{
ChangePinOveylay(ADF_I01);
ChangePinOveylay(ADF_I02);
ChangePinOveylay(ADF_PH1);
ChangeDir_Mask(ADF_I01, PinDirOutput);
ChangeDir_Mask(ADF_I02, PinDirOutput);
ChangeDir_Mask(ADF_PH1,PinDirOutput);
ChangePinOveylay(ADF_I11);
ChangePinOveylay(ADF_I12);
ChangePinOveylay(ADF_PH2);
ChangeDir_Mask(ADF_I11, PinDirOutput);
ChangeDir_Mask(ADF_I12, PinDirOutput);
ChangeDir_Mask(ADF_PH2,PinDirOutput);
ChangePinOveylay(FB_OR_ADF_CS);
ChangeDir_Mask(FB_OR_ADF_CS,PinDirOutput);
SetGpio_0(FB_OR_ADF_CS);
SetGpio_1(ADF_I01);
SetGpio_1(ADF_I02);
SetGpio_1(ADF_I11);
SetGpio_1(ADF_I12);
IO_WRITE32(SYTCNT4, 0x20d44); //init the counter for restarting the timer4
IO_WRITE32(SYTTC4, 0x20d44);
if (Timer4InitAlready)
{
IO_WRITE32(SYTCTL4, 0x00000007);
}
else
{
SYT_Init(SYT_Timer4, 0x20d44, OS_Timer4LISR);
Timer4InitAlready=Value_1;
}
PinGroupForTimer4=0X04;
PlusCounter=0x00;
phase=0;
}break;
case 0x04:
{
ChangePinOveylay(FB_I01);
ChangePinOveylay(FB_I02);
ChangePinOveylay(FB_PH1);
ChangeDir_Mask(FB_I01, PinDirOutput);
ChangeDir_Mask(FB_I02, PinDirOutput);
ChangeDir_Mask(FB_PH1,PinDirOutput);
ChangePinOveylay(FB_I11);
ChangePinOveylay(FB_I12);
ChangePinOveylay(FB_PH2);
ChangeDir_Mask(FB_I11, PinDirOutput);
ChangeDir_Mask(FB_I12, PinDirOutput);
ChangeDir_Mask(FB_PH2,PinDirOutput);
ChangePinOveylay(FB_OR_ADF_CS);
ChangeDir_Mask(FB_OR_ADF_CS,PinDirOutput);
SetGpio_1(FB_OR_ADF_CS);
SetGpio_1(FB_I11);
SetGpio_1(FB_I01);
SetGpio_1(FB_I02);
SetGpio_1(FB_I12);
IO_WRITE32(SYTCNT4, 0x20d44); //init the counter for restarting the timer4
IO_WRITE32(SYTTC4, 0x20d44);
if (Timer4InitAlready)
{
IO_WRITE32(SYTCTL4, 0x00000007);
}
else
{
SYT_Init(SYT_Timer4, 0x20d44, OS_Timer4LISR);
Timer4InitAlready=Value_1;
}
PinGroupForTimer4=1;
phase=0;
}break;
case 0x05:
{
IO_WRITE32(SYTCTL4, 0x00000005);
PinGroupForTimer4=0;
SetGpio_1(FB_I01);
SetGpio_1(FB_I02);
SetGpio_1(FB_I11);
SetGpio_1(FB_I12);
OveylayRecoverTOScap(FB_I01);
OveylayRecoverTOScap(FB_I02);
OveylayRecoverTOScap(FB_I11);
OveylayRecoverTOScap(FB_I12);
OveylayRecoverTOScap(FB_PH1);
OveylayRecoverTOScap(FB_PH2);
}break;
case 0x06:
{
ChangePinOveylay(FB_I01);
ChangePinOveylay(FB_I02);
ChangePinOveylay(FB_PH1);
ChangeDir_Mask(FB_I01, PinDirOutput);
ChangeDir_Mask(FB_I02, PinDirOutput);
ChangeDir_Mask(FB_PH1,PinDirOutput);
ChangePinOveylay(FB_I11);
ChangePinOveylay(FB_I12);
ChangePinOveylay(FB_PH2);
ChangeDir_Mask(FB_I11, PinDirOutput);
ChangeDir_Mask(FB_I12, PinDirOutput);
ChangeDir_Mask(FB_PH2,PinDirOutput);
ChangePinOveylay(FB_OR_ADF_CS);
ChangeDir_Mask(FB_OR_ADF_CS,PinDirOutput);
SetGpio_1(FB_OR_ADF_CS);
SetGpio_1(FB_I11);
SetGpio_1(FB_I01);
SetGpio_1(FB_I02);
SetGpio_1(FB_I12);
IO_WRITE32(SYTCNT4, 0x20d44); //init the counter for restarting the timer4
IO_WRITE32(SYTTC4, 0x20d44);
if (Timer4InitAlready)
{
IO_WRITE32(SYTCTL4, 0x00000007);
}
else
{
SYT_Init(SYT_Timer4,0x20d44, OS_Timer4LISR);
Timer4InitAlready=Value_1;
}
PinGroupForTimer4=0x02;
PlusCounter=0x00;
phase=0;
}break;
case 0x07:
{
ChangePinOveylay(ADF_DES);
ChangeDir_Mask(ADF_DES,PinDirInput);
ChangePinOveylay(ADF_DES);
ChangeDir_Mask(ADF_DS,PinDirInput);
ChangePinOveylay(HOME_SENSOR);
ChangeDir_Mask(HOME_SENSOR,PinDirInput);
ChangePinOveylay(TONER);
ChangeDir_Mask(TONER,PinDirInput);
}break;
case 0x09:
{
ChangePinOveylay(HSYNC_ENG);
ChangeDir_Mask(HSYNC_ENG,PinDirInput);
ChangePinOveylay(EPRDY_ENG);
ChangeDir_Mask(EPRDY_ENG,PinDirInput);
ChangePinOveylay(PRRDY_ENG);
ChangeDir_Mask(PRRDY_ENG,PinDirInput);
ChangePinOveylay(TOD_ENG);
ChangeDir_Mask(TOD_ENG,PinDirInput);
ChangePinOveylay(ETBSY_ENG);
ChangeDir_Mask(ETBSY_ENG,PinDirInput);
ChangePinOveylay(STS_ENG);
ChangeDir_Mask(STS_ENG,PinDirInput);
ChangePinOveylay(WR_ENG);
ChangeDir_Mask(WR_ENG,PinDirInput);
ChangePinOveylay(COVEROPEN_ENG);
ChangeDir_Mask(COVEROPEN_ENG,PinDirInput);
} break;
case 0x0b:
{
ChangePinOveylay(CTBSY_ENG);
ChangeDir_Mask(CTBSY_ENG,PinDirOutput);
ChangePinOveylay(CPRDY_ENG);
ChangeDir_Mask(CPRDY_ENG,PinDirOutput);
ChangePinOveylay(CMD_ENG);
ChangeDir_Mask(CMD_ENG,PinDirOutput);
ChangePinOveylay(VIDEO_ENG);
ChangeDir_Mask(VIDEO_ENG,PinDirOutput);
ChangePinOveylay(SPCLK_ENG);
ChangeDir_Mask(SPCLK_ENG,PinDirOutput);
ChangePinOveylay(RESET_ENG);
ChangeDir_Mask(RESET_ENG,PinDirOutput);
SetGpio_1(CTBSY_ENG);
SetGpio_1(CPRDY_ENG);
SetGpio_1(CMD_ENG);
SetGpio_1(VIDEO_ENG);
SetGpio_1(SPCLK_ENG);
SetGpio_0(RESET_ENG);
}break;
case 0x0C:
{
ChangePinOveylay(CTBSY_ENG);
ChangeDir_Mask(CTBSY_ENG,PinDirOutput);
ChangePinOveylay(CPRDY_ENG);
ChangeDir_Mask(CPRDY_ENG,PinDirOutput);
ChangePinOveylay(CMD_ENG);
ChangeDir_Mask(CMD_ENG,PinDirOutput);
ChangePinOveylay(VIDEO_ENG);
ChangeDir_Mask(VIDEO_ENG,PinDirOutput);
ChangePinOveylay(SPCLK_ENG);
ChangeDir_Mask(SPCLK_ENG,PinDirOutput);
ChangePinOveylay(RESET_ENG);
ChangeDir_Mask(RESET_ENG,PinDirOutput);
SetGpio_1(CTBSY_ENG);
SetGpio_1(CPRDY_ENG);
SetGpio_1(CMD_ENG);
SetGpio_1(VIDEO_ENG);
SetGpio_0(SPCLK_ENG);
SetGpio_1(RESET_ENG);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -