📄 timer_send.c.bak
字号:
//主机发I桢m-m,从机用透明模式
//------------------------------------------------------------------
#include "iom128v.h"
#include "macros.h"
//------------------------------------------------------------------
#define XFIFO ((volatile unsigned char *)0)
#define XBYTE ((volatile unsigned char *)0)
#define MASK (*(volatile unsigned char *)0x2020)
#define MASB (*(volatile unsigned char *)0x2060)
#define ISTA (*(volatile unsigned char *)0x2020)
#define ISTB (*(volatile unsigned char *)0x2060)
#define CMDR (*(volatile unsigned char *)0x2021)
#define STAR (*(volatile unsigned char *)0x2021)
#define MODE (*(volatile unsigned char *)0x2022)
#define TIMR (*(volatile unsigned char *)0x2023)
#define XAD1 (*(volatile unsigned char *)0x2023)
#define EXIR (*(volatile unsigned char *)0x2024)
#define XAD2 (*(volatile unsigned char *)0x2025)
#define RBCL (*(volatile unsigned char *)0x2025)
#define RAH1 (*(volatile unsigned char *)0x2026)
#define RAH2 (*(volatile unsigned char *)0x2027)
#define RSTA (*(volatile unsigned char *)0x2027)
#define RAL1 (*(volatile unsigned char *)0x2028)
#define RAL2 (*(volatile unsigned char *)0x2029)
#define RHCR (*(volatile unsigned char *)0x2029)
#define XBCL (*(volatile unsigned char *)0x202a)
#define BGR (*(volatile unsigned char *)0x202b)
#define CCR2 (*(volatile unsigned char *)0x202c)
#define XBCH (*(volatile unsigned char *)0x202d)
#define RBCH (*(volatile unsigned char *)0x202d)
#define RLCR (*(volatile unsigned char *)0x202e)
#define VSTR (*(volatile unsigned char *)0x202e)
#define CCR1 (*(volatile unsigned char *)0x202f)
#define XFW (STAR&0x40)>>6 //发送FIFO可写
#define CEC (STAR&0x04)>>2 //CEC=1,CMDR不可写;CEC=0,CMDR可写
#define RME (ISTA&0x80)>>7 //信息接收结束
#define RPF (ISTA&0x40)>>6 //32Bytes接受池满
#define RSC (ISTA&0x20)>>5 //自动模式下对方的状态
#define XPR (ISTA&0x10)>>4 //发送池正空
#define TIN (ISTA&0x08)>>3 //定时器中断
#define XMR (EXIR&0x80)>>7 //发送需要重复
#define XDU (EXIR&0x40)>>6 //发送中途中止
#define PCE (EXIR&0x20)>>5 //协议错误
#define RFO (EXIR&0x10)>>4 //接收数据无法存入RFIFO造成溢出
#define CSC (EXIR&0x08)>>3 //CTS状态改变
#define RFS (EXIR&0x04)>>2 //接收到帧头
//---------------------------------------------------------------------
unsigned char flag_txd;
unsigned char pre_txd[33];
unsigned char count;
extern unsigned char front,rear;
//-----------------------------------------------------------------------------
//Queue_2D Declaration Start===================================================
void InitQueue();
unsigned char QueueEmpty();
unsigned char QueueFull();
void EnQueue(unsigned char txd_data[32],unsigned char num_enQ); //入队
void DeQueue(); //出队
//Queue_2D Declaration End=====================================================
//DATA Array for Test Start====================================================
unsigned char data_array01[32]={0x02,0x93};
unsigned char data_array02[32]={0x02,0x00,0xff,0xee};
unsigned char data_array03[32]={0x03,0x00,0x66};
unsigned char data_array04[32]={0x04,0x00,0xff};
//DATA Array for Test End======================================================
//-----------------------------------------------------------------------------
void chipinit(void)
{
DDRB|=0xcf; //1100_1111
PORTB|=0xcf; //同上
DDRD=0xfc; //1111_1100 **
//PORTD=0x3f;
DDRE=0x07; //0000_0011
PORTE=0xfc; //1111_1100
DDRF=0x00; //0000_0000
PORTF=0xff; //1111_1111
DDRG=0xff; //1111_1111
PORTG=0x1f; //0001_1111
//enable the interrupt
//SREG|=0x80; //1000_0000
//enable the external ram
MCUCR=(1<<SRE);//使能外部RAM线路
EICRA=0x00;
EIMSK=0x00;
//EIMSK=0x01;
return;
}
//-------------------------------------------------------------
void resethdlc(void)
{
PORTD|=0x40; //0100_0000
//PORTD&=0xbf;
}
//--------------------------------------------------------------
void cshdlc(void)
{
PORTD&=0x3f; //0011_1111
}
//-------------------------------------------------------------
void int_open(void)
{
_SEI();
asm("nop");
}
//--------------------------------------------------------------
void clk(void)
{
PORTD&=0xdf; //1101_1111 片选8254
//送入计数方式
XBYTE[0x3300]=0x36; //地址11_0000_0000 数据0011_0110
XBYTE[0x3000]=0x02; //地址00_0000_0000 数据0000_0010
XBYTE[0x3000]=0x00; //地址00_0000_0000 数据0000_0000
XBYTE[0x3300]=0x76; // 数据0111_0110
XBYTE[0x3100]=0x02; //地址01_0000_0000 数据0000_0010
XBYTE[0x3100]=0x00; //地址01_0000_0000 数据0000_0000
XBYTE[0x3300]=0xB6; // 数据1011_0110
XBYTE[0x3200]=0x02; //地址10_0000_0000 数据0000_0010
XBYTE[0x3200]=0x00; //地址10_0000_0000 数据0000_0000
//启动分频计数器
PORTD|=0x1c; //0001_1100
//取消片选
PORTD|=0x20; //0010_0000
return;
}
//------------------------------------------------------------------
void automode(void)
{
CCR1=0x98; //1001_1000
MASB=0xfb; //1111_1011
MASK=0x27; //0010_0111
MODE=0x18; //0001_1100 数据传输由HSCX自动管理
TIMR=0x7f; //监控帧自动重试的次数
XAD1=0x00; //未知
XAD2=0x03; //未知
RAH1=0x02; //IMPORMANT!!!
RAH2=0x00; //IMPORTANT!!!
RAL1=0x01; //未知
RAL2=0x01; //未知
CCR2=0x00; //
XBCH=0x00;
while(CEC==1); //等待CMDR可写
CMDR=0x41; //重启收发器
}
//-----------------------------------------------------------------------
void delay_nms(unsigned int tm)
{
unsigned int i_dms;
for(i_dms=tm;i_dms>0;i_dms--)
delay_1ms();
}
//------------------------------------------------------------------
void delay_1ms(void)
{
unsigned int i_dl;
for(i_dl=1;i_dl<(unsigned int)(4*143-2);i_dl++)
;
}
//------------------------------------------------------------------
void transmit(void)
{
unsigned char it=0;
unsigned char xfw;
flag_txd=1;
if(count!=0)
{
DeQueue();
while(CEC==1);
do
{
xfw=XFW;
}while(xfw!=1);
for(it=0;it<pre_txd[32];it++)
{
XFIFO[0x2000+it]=pre_txd[it];
}
while(CEC==1);//等待CMDR可写
CMDR|=0x0a; //写入,引起发送
}
delay_1ms();
flag_txd=0;
}
//-----------------------------------------------------------------------
main()
{
int im=0;
chipinit();
clk();
resethdlc();
cshdlc();
automode();
InitQueue();
timer0_init();
int_open();
/*txd[0]=0x02;
txd[1]=0x93;
EnQueue(txd,2);
txd[0]=0x02;
txd[1]=0x00;
for(im=2;im<17;im++)
txd[im]=0x99;
EnQueue(txd,17);
for(im=0;im<27;im++)
txd[im]=0xaa;
EnQueue(txd,27);
delay_nms(1000);
EnQueue(txd,27);
while(flag_txd);
transmit();
while(flag_txd);
transmit();
while(flag_txd);
transmit();*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -