📄 hawaii_main.c
字号:
//2009-03-24日调试通过
#include<iom64.h>
#include<ioavr.h>
#include<comp_a90.h>
#include"hawaii_include.h"
#include "sja_bcanFunc.c"
uint i=0,j=0;
uchar key_final,usart_timer1;
uchar usart_buff[12];
uchar usart_dpr,usart_length,usart_cs,usart_sign;
uchar BandRateBuf; //设置总线波特率值缓冲区
uchar send_data[10],rcv_data[10]; //发送和接收数组
uchar CanBusFlag=0; //can标志
uchar status,flg_send,flg_rcv; //状态字
// 外部中断3处理程序
#pragma vector=INT0_vect
__interrupt void can_int(void)
{
CLI;
SJA_BCANAdr=REG_INTERRUPT; //SJA_BCANAdr定义的指针
CanBusFlag=*SJA_BCANAdr; //保存sja1000中断标志
SEI;
}
void main(void)
{
delay_nms(100);
init_devices();
CLEARBIT(DDRCANINT,CAN_INT);
CLEARBIT(DDRB,4);
do
{
status=Config_SJA(); //配置sja1000
}
while(status!=0); //争取配置sja1000反馈0,否则反馈1
CLEARBIT(PORTLED,LED3); //开机闪灯
CLEARBIT(PORTLED,LED2);
CLEARBIT(PORTLED,LED1);
CLEARBIT(PORTLED,LED4);
delay_nms(80);
SETBIT(PORTLED,LED3);
SETBIT(PORTLED,LED2);
SETBIT(PORTLED,LED1);
SETBIT(PORTLED,LED4);
delay_nms(80);
CLEARBIT(PORTLED,LED3);
CLEARBIT(PORTLED,LED2);
CLEARBIT(PORTLED,LED1);
CLEARBIT(PORTLED,LED4);
delay_nms(80);
SETBIT(PORTLED,LED3);
SETBIT(PORTLED,LED2);
SETBIT(PORTLED,LED4);
SETBIT(PORTLED,LED1);
while(1)
{
if(CanBusFlag&0x01)
{
CLI;
CanBusFlag&=0xFE; //接收标志位清零
BCAN_DATA_RECEIVE(rcv_data); //接收数据
BCAN_CMD_PRG(RRB_CMD); //释放接收缓冲区
flg_send=1;
SEI;
}
if(flg_send==1)
{
for(i=0;i<=(rcv_data[1]+1);i++)
{
usart_buff[i]=rcv_data[i];
}
send_buff(rcv_data[1]+2);
flg_send=0;
}
if(flg_rcv==1)
{
BCAN_DATA_WRITE(send_data); //发送数据
BCAN_CMD_PRG(TR_CMD); //置位发送请求位
flg_rcv=0;
}
if (CanBusFlag&0x04) //错误中断
{
CLEARBIT(PORTLED,LED3); //开机闪灯
CLEARBIT(PORTLED,LED2);
delay_nms(80);
SETBIT(PORTLED,LED3);
SETBIT(PORTLED,LED2);
delay_nms(80);
CLEARBIT(PORTLED,LED1);
CLEARBIT(PORTLED,LED4);
delay_nms(80);
SETBIT(PORTLED,LED4);
SETBIT(PORTLED,LED1);
CanBusFlag&=0xfB; //错误标志位清零
Config_SJA(); //初始化SJA
}
}
}
uchar key_scan_first(void)
{
return(0);
}
uchar key_scan(void)
{
uchar key_code=0,key_error=0;
if(key_error>1)key_code=0;
return(key_code);
}
void send_buff(uchar send_num)
{
uchar num;//usart_cs=0;
send_num--;
for(num=0;num<(send_num+1);num++)
{
UDR0=usart_buff[num];
while(!(UCSR0A & (1<<UDRE0)));
usart_buff[num]=0;
}
delay_nus(250);
}
uchar Config_SJA(void)
{
uchar status=0;
SETBIT(DDRCANCS,CS);
CLEARBIT(PORTCANCS,CS);
SETBIT(DDRCANRST,RST);
CLEARBIT(PORTCANRST,RST);
delay_nus(5000);
SETBIT(DDRCANRST,RST);
SETBIT(PORTCANRST,RST);
delay_nus(50);
BandRateBuf = ByteRate_200k;
BCAN_ENTER_RETMODEL();
if(BCAN_CREATE_COMMUNATION())//
{
status = CAN_INTERFACE_ERR;
return(status);
}
if(BCAN_SET_BANDRATE(BandRateBuf))//初始化系统默认值波特率200kbps
{
status = CAN_INITBTR_ERR ;
return(status);
}
if(BCAN_SET_OBJECT(0x00,0x00))
{
status =CAN_INITOBJECT_ERR;
return(status);
}
if(BCAN_SET_OUTCLK(0xfa,0x40))
{
status =CAN_INITOUTCTL_ERR;
return(status);
}
if(BCAN_QUIT_RETMODEL())
{
status = CAN_QUITRESET_ERR;
return(status);
}
SJA_BCANAdr=REG_CONTROL;
*SJA_BCANAdr=0X1E;//进入工作模式
return status;
}
void CanSend_Prg(void) //can发送数据
{
}
void CanErr_Prg(void) //发现错误后处理
{
Config_SJA(); //
}
void CanDtOver_Prg(void) //超载处理
{
// BCAN_CMD_PRG(COS_CMD);
}
void CanWui_Prg(void) //唤醒中断处理
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -