Files
Balsam_167/Source/Internal/peripher.c

272 lines
8.9 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.
/* Выбор типа платы, направления GPIO и чтение входов. get_Mode
* читает аппаратный адрес и выбирает Desk. Один вывод в разных
* режимах может иметь разное назначение. Для нагрузки START=GPIO62,
* STOP=GPIO58, RES_OUT_2=GPIO3 (активный ноль). Направления заданы
* в GPIO_table.h; изменение распиновки требует сверки со схемой.
*/
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
#include "filter_bat2.h"
#include "measure.h"
#include "RS485.h"
#include "message.h"
#include "package.h"
#include "pulto.h"
#include "peripher.h"
#include "GPIO_table.h"
int Mode,Desk,TermoAD=0,TermoRS=0,TermoSW=0,Kurrent=0,Kalibro=0;
long INcount0=0,INcount1=0;
LONGE DigErr;
int MUX_GPIO32,MUX_GPIO48,DIR_GPIO32,DIR_GPIO48;
void setup_leds_line()
{
MUX_GPIO32 = GpioCtrlRegs.GPBMUX1.bit.GPIO32;
MUX_GPIO48 = GpioCtrlRegs.GPBMUX2.bit.GPIO48;
DIR_GPIO32 = GpioCtrlRegs.GPBDIR.bit.GPIO32;
DIR_GPIO48 = GpioCtrlRegs.GPBDIR.bit.GPIO48;
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1;
EDIS;
}
void unsetup_leds_line()
{
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = MUX_GPIO32;
GpioCtrlRegs.GPBMUX2.bit.GPIO48 = MUX_GPIO48;
GpioCtrlRegs.GPBDIR.bit.GPIO32 = DIR_GPIO32;
GpioCtrlRegs.GPBDIR.bit.GPIO48 = DIR_GPIO48;
EDIS;
}
void get_Mode()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 00—11
GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 19—27
GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // 32—34
GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 48—53, 58—63
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO21 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO22 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0;
EDIS;
Mode = 1;
Mode += 1 * !GpioDataRegs.GPADAT.bit.GPIO21;
Mode += 2 * !GpioDataRegs.GPADAT.bit.GPIO20;
Mode += 4 * !GpioDataRegs.GPADAT.bit.GPIO22;
Mode += 8 * !GpioDataRegs.GPBDAT.bit.GPIO51;
if( (Mode==adr_POW1)||(Mode==adr_POW2)) Desk = dsk_COMM;
if( (Mode==adr_TRN1)||(Mode==adr_TRN2)) Desk = dsk_BKST;
if( (Mode==adr_LOA1)||(Mode==adr_LOA2)) Desk = dsk_LOAD;
if (Mode==adr_ENG1) Desk = dsk_BKSD;
if (Mode==adr_PLT3) Desk = dsk_EPLT;
if (Mode==adr_SHKF) Desk = dsk_SHKF;
if( (Desk==dsk_COMM)||(Desk==dsk_SHKF)||
(Desk==dsk_LOAD) ) Kalibro = 1;
if( (Desk==dsk_COMM)||(Desk==dsk_LOAD)) Kurrent = 1;
if( (Desk==dsk_BKSD)||(Desk==dsk_BKST)) TermoRS = 1;
if( (Desk==dsk_COMM)||(Desk==dsk_SHKF)) TermoAD = 1;
if( (Desk==dsk_COMM)||(Desk==dsk_BKST)) TermoSW = 2;
if (Desk==dsk_BKSD) TermoSW = 1;
clear_LED_OUT_1();
clear_LED_OUT_2();
clear_RES_OUT_1();
clear_RES_OUT_2();
EALLOW;
switch(Desk)
{
case dsk_COMM: GpioCtrlRegs.GPADIR.all = COMM_GPADIR;
GpioCtrlRegs.GPBDIR.all = COMM_GPBDIR; break;
case dsk_BKSD: GpioCtrlRegs.GPADIR.all = BKSD_GPADIR;
GpioCtrlRegs.GPBDIR.all = BKSD_GPBDIR; break;
case dsk_BKST: GpioCtrlRegs.GPADIR.all = BKST_GPADIR;
GpioCtrlRegs.GPBDIR.all = BKST_GPBDIR; break;
case dsk_EPLT: GpioCtrlRegs.GPADIR.all = PLT2_GPADIR;
GpioCtrlRegs.GPBDIR.all = PLT2_GPBDIR; break;
case dsk_LOAD: GpioCtrlRegs.GPADIR.all = LOAD_GPADIR;
GpioCtrlRegs.GPBDIR.all = LOAD_GPBDIR;
GpioDataRegs.GPASET.bit.GPIO3=1; break;
case dsk_SHKF: GpioCtrlRegs.GPADIR.all = SHKF_GPADIR;
GpioCtrlRegs.GPBDIR.all = SHKF_GPBDIR; break;
}
EDIS;
}
void select_tpl_canal(int n_tpl)
{
if(Desk==dsk_BKSD)
{
#define BKSD_A_tpl_zero ((1L<<11) + (1L<<9) + (1L<<7) + (1L<<3))
GpioDataRegs.GPASET.all = BKSD_A_tpl_zero;
if(n_tpl&0x01) GpioDataRegs.GPACLEAR.bit.GPIO11=1;
if(n_tpl&0x02) GpioDataRegs.GPACLEAR.bit.GPIO9=1;
if(n_tpl&0x04) GpioDataRegs.GPACLEAR.bit.GPIO7=1;
if(n_tpl&0x08) GpioDataRegs.GPACLEAR.bit.GPIO3=1;
}
if(Desk==dsk_BKST)
{
#define BKST_A_tpl_zero ((1L<<11) + (1L<<9) + (1L<<7) + (1L<<3) + (1L<<1) + (1L<<8) + (1L<<6) + (1L<<0) + (1L<<27) + (1L<<24))
#define BKST_B_tpl_zero ((1L<<(53-32)) + (1L<<(50-32)))
GpioDataRegs.GPASET.all = BKST_A_tpl_zero;
GpioDataRegs.GPBSET.all = BKST_B_tpl_zero;
if(n_tpl==0) GpioDataRegs.GPACLEAR.bit.GPIO11=1;
if(n_tpl==1) GpioDataRegs.GPACLEAR.bit.GPIO9=1;
if(n_tpl==2) GpioDataRegs.GPACLEAR.bit.GPIO7=1;
if(n_tpl==3) GpioDataRegs.GPACLEAR.bit.GPIO3=1;
if(n_tpl==4) GpioDataRegs.GPACLEAR.bit.GPIO1=1;
if(n_tpl==5) GpioDataRegs.GPACLEAR.bit.GPIO8=1;
if(n_tpl==6) GpioDataRegs.GPACLEAR.bit.GPIO6=1;
if(n_tpl==7) GpioDataRegs.GPACLEAR.bit.GPIO0=1;
if(n_tpl==8) GpioDataRegs.GPACLEAR.bit.GPIO27=1;
if(n_tpl==9) GpioDataRegs.GPACLEAR.bit.GPIO24=1;
if(n_tpl==10) GpioDataRegs.GPBCLEAR.bit.GPIO53=1;
if(n_tpl==11) GpioDataRegs.GPBCLEAR.bit.GPIO50=1;
}
if(Desk==dsk_COMM)
{
#define COMM_A_tpl_zero ((1L<<27) + (1L<<24) + (1L<<25))
#define COMM_B_tpl_zero ((1L<<(49-32)) + (1L<<(52-32)))
GpioDataRegs.GPACLEAR.all = COMM_A_tpl_zero;
GpioDataRegs.GPBCLEAR.all = COMM_B_tpl_zero;
if(n_tpl&0x01) GpioDataRegs.GPASET.bit.GPIO27=1;
if(n_tpl&0x02) GpioDataRegs.GPASET.bit.GPIO24=1;
if(n_tpl&0x04) GpioDataRegs.GPASET.bit.GPIO25=1;
if(n_tpl&0x08) GpioDataRegs.GPBSET.bit.GPIO49=1;
if(n_tpl&0x10) GpioDataRegs.GPBSET.bit.GPIO52=1;
} }
void get_Buttons()
{
unsigned long butt =0;
unsigned long fluf =0;
if(Desk==dsk_BKSD)
{
bTestLamp = !GpioDataRegs.GPBDAT.bit.GPIO50;
bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO49;
InputRep0 = bTestLamp;
InputRep1 = bSecretBt;
if(GpioDataRegs.GPADAT.bit.GPIO0) butt +=0x0001;
if(GpioDataRegs.GPADAT.bit.GPIO2) butt +=0x0002;
if(GpioDataRegs.GPADAT.bit.GPIO10)butt +=0x0004;
if(GpioDataRegs.GPADAT.bit.GPIO4) butt +=0x0008;
Inputs.all = butt;
}
/* Ничего такого в действительности нет
if(Desk==dsk_BKST)
{ bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO63;
InputRep1 = bSecretBt;
return;
} */
if(Desk==dsk_COMM)
{
bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO53;
bTermoCal = er_anal(!GpioDataRegs.GPBDAT.bit.GPIO50, &INcount0, 500000, 0);
InputRep1 = bSecretBt;
InputRep2 = bTermoCal;
}
if(Desk==dsk_EPLT)
{
/* Фильтрует TESTLAMP на GPIO26 накопителем INcount0 с порогом 1000 опросов главного цикла; прежний bTestLamp удерживает режим теста при кратких провалах входа до подтверждения нового состояния фильтром. */
bTestLamp = er_anal(GpioDataRegs.GPADAT.bit.GPIO26, &INcount0, 1000, bTestLamp);
if(GpioDataRegs.GPADAT.bit.GPIO27) butt +=0x0001;
if(GpioDataRegs.GPADAT.bit.GPIO24) butt +=0x0002;
if(GpioDataRegs.GPBDAT.bit.GPIO53) butt +=0x0004;
if(GpioDataRegs.GPBDAT.bit.GPIO50) butt +=0x0008;
if(GpioDataRegs.GPADAT.bit.GPIO26) butt +=0x0010;
if(GpioDataRegs.GPADAT.bit.GPIO23) butt +=0x0020;
if(GpioDataRegs.GPBDAT.bit.GPIO52) butt +=0x0040;
if(GpioDataRegs.GPADAT.bit.GPIO4 ) butt +=0x0080;
if(GpioDataRegs.GPADAT.bit.GPIO25) butt +=0x0100;
if(GpioDataRegs.GPBDAT.bit.GPIO49) butt +=0x0200;
if(GpioDataRegs.GPADAT.bit.GPIO11) butt +=0x0400;
if(GpioDataRegs.GPADAT.bit.GPIO5 ) butt +=0x0800;
if(GpioDataRegs.GPBDAT.bit.GPIO48) butt +=0x1000;
if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Секретный вход
Inputs.all = butt;
}
if(Desk==dsk_LOAD)
{
if(!GpioDataRegs.GPADAT.bit.GPIO6) butt +=0x0001; // OMEGA
if(!GpioDataRegs.GPADAT.bit.GPIO8) butt +=0x0002; // Start_1
if(!GpioDataRegs.GPADAT.bit.GPIO11) butt +=0x0004; // Res_in
Inputs.all = butt;
}
if(Desk==dsk_SHKF)
{
if(GpioDataRegs.GPBDAT.bit.GPIO53) fluf += 0x0000010; else butt += 0x0001;
if(GpioDataRegs.GPBDAT.bit.GPIO52) fluf += 0x0000040; else butt += 0x0002;
if(GpioDataRegs.GPADAT.bit.GPIO2) fluf += 0x0001000; else butt += 0x0004;
if(GpioDataRegs.GPADAT.bit.GPIO4) fluf += 0x0002000; else butt += 0x0008;
if(GpioDataRegs.GPADAT.bit.GPIO6) fluf += 0x0004000; else butt += 0x0010;
if(GpioDataRegs.GPADAT.bit.GPIO0) fluf += 0x0008000; else butt += 0x0020;
if(GpioDataRegs.GPADAT.bit.GPIO8) fluf += 0x0010000; else butt += 0x0040;
if(GpioDataRegs.GPADAT.bit.GPIO10) fluf += 0x0020000; else butt += 0x0080;
if(GpioDataRegs.GPADAT.bit.GPIO3) fluf += 0x0040000; else butt += 0x0100;
if(GpioDataRegs.GPADAT.bit.GPIO5) fluf += 0x0080000; else butt += 0x0200;
if(GpioDataRegs.GPADAT.bit.GPIO7) fluf += 0x0100000; else butt += 0x0400;
if(GpioDataRegs.GPADAT.bit.GPIO1) fluf += 0x0200000; else butt += 0x0800;
if(GpioDataRegs.GPADAT.bit.GPIO11) fluf += 0x0400000; else butt += 0x1000;
if(GpioDataRegs.GPADAT.bit.GPIO9) fluf += 0x0800000; else butt += 0x2000;
DigErr.all = fluf;
Inputs.all = butt;
}
butt = 1 * !GpioDataRegs.GPADAT.bit.GPIO21;
butt += 2 * !GpioDataRegs.GPADAT.bit.GPIO20;
butt += 4 * !GpioDataRegs.GPADAT.bit.GPIO22;
butt += 8 * !GpioDataRegs.GPBDAT.bit.GPIO51;
Jumpers = butt;
}