📄 midi.c
字号:
#include "config.h"
#include "midi.h"
#include "portdataIO.h"
// 31.25k
MIDIDATAREG mididatareg;
_DMXINCONTROL dmxincontrol;
unsigned char dmxdata[defaultlightchannel];
unsigned char *dataprt;
uint32 rxcount;
uint8 lightstatus;
void FIQ_Exception(void)
{
unsigned char intsourss;
unsigned char datatemp1;
unsigned char datatemp2;
uint8 datatemp;
datatemp1=U1MSR;
datatemp2=U1IIR;
intsourss=U1LSR;
datatemp=U1RBR;
if ((intsourss & 0x01)==0x01) // 数据有效
{
if ((intsourss & 0x10)==0x10) // 收到的是数据头
{
rxd_handbyte(datatemp); //
}
else
{
if (dmxincontrol.handbyte == TRUE) // 上字节是头数据
{
if (dmxincontrol.dmxrxdend ==TRUE)
{
if (datatemp==0) // 第二个字接
{
dmxincontrol.handbyte = FALSE;
}
else
{
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE; // 第二字节错误
dmxincontrol.dmxrxdend = FALSE;
}
}
else
{
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE;
dmxincontrol.dmxrxdend = FALSE;
}
}
else
{
if (dmxincontrol.dmxrxdend==TRUE) //
{
if (dmxincontrol.rxdit == TRUE) // rxd data
{
*dataprt = datatemp;
dmxincontrol.lightchannel--;
if (dmxincontrol.lightchannel==0)
{
rxd_fals_led();
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE;
dmxincontrol.dmxrxdend = FALSE;
}
else
{
dataprt++;
}
}
else //
{
if (dmxincontrol.lightaddress == defaultlightaddress)
{
dataprt = dmxdata;
*dataprt = datatemp;
dmxincontrol.lightchannel--;
if (dmxincontrol.lightchannel==0)
{
rxd_fals_led();
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE;
dmxincontrol.dmxrxdend = FALSE;
}
else
{
dmxincontrol.rxdit=TRUE;
dataprt++;
}
}
else
{
dmxincontrol.lightaddress++;
}
// dmxincontrol.lightaddress--;
// if (dmxincontrol.lightaddress ==0)
// {
// dataprt = dmxdata;
// dmxincontrol.rxdit=TRUE;
// }
}
}
else
{
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE;
dmxincontrol.dmxrxdend = FALSE;
}
}
}
}
}
void rxd_dataop(void)
{
}
void rxd_handbyte(unsigned char datatemp)
{
if (datatemp==0) // 确定是数据头
{
// rxd_fals_led();
dmxincontrol.handbyte = TRUE;
dmxincontrol.dmxrxdend = TRUE;
dmxincontrol.lightchannel=defaultlightchannel;
// dmxincontrol.lightaddress=defaultlightaddress-1;
dmxincontrol.lightaddress=1;
dmxincontrol.rxdit = FALSE;
}
else // 数据头接收错误
{
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE;
dmxincontrol.dmxrxdend = FALSE;
}
}
void rxd_fals_led(void)
{
if (dmxincontrol.led_div>=15)
{
dmxincontrol.led_div=0;
if (dmxincontrol.ledstatus==FALSE)
{
dmxincontrol.ledstatus=TRUE;
IO1SET = rxled;
}
else
{
dmxincontrol.ledstatus=FALSE;
IO1CLR = rxled;
}
}
else
{
dmxincontrol.led_div++;
}
}
void UART1_initiall(void)
{
dmxincontrol.led_div=0;
dmxincontrol.ledstatus=FALSE;
dmxincontrol.handbyte = FALSE;
dmxincontrol.rxdit = FALSE;
dmxincontrol.dmxrxdend = FALSE;
//
U1LCR =0x87;//1000 0011
U1DLL = 0x06; // 31.25K
U1DLM = 0x00;
U1LCR = 0x07;
VICIntSelect=VICIntSelect | uart1selectFRQ;
VICIntEnable=VICIntEnable | uart1enableFRQ;
U1IER=0x01; // open interrput
//
mididatareg.commandflags=FALSE;
mididatareg.renbit=FALSE;
mididatareg.songstatus=0;
mididatareg.songcount=0;
mididatareg.position=0;
}
void readmididata(void)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -