#include <xc.h>
#include "ecan.h"
//#include "memory.h"
#include "pin_manager.h"
#include"flash.h"
/**
Local Functions
*/
//extern unsigned char delay_boot,bootloader_flag;
bit REflag=0;
uint16_t wtime=0;
unsigned char cansenddata[8]={0};
unsigned char temp_DLC;
unsigned char temp_D[8];
unsigned char BOOTCANH=0,BOOTCANL;
void ECAN_extend(void);//发送标准帧
unsigned long convertReg2ExtendedCANid(unsigned char tempRXBn_EIDH, unsigned char tempRXBn_EIDL, unsigned char tempRXBn_SIDH, unsigned char tempRXBn_SIDL);
unsigned long convertReg2StandardCANid(unsigned char tempRXBn_SIDH, unsigned char tempRXBn_SIDL);
void convertCANid2Reg(unsigned long tempPassedInID, unsigned char canIdType, unsigned char *passedInEIDH, unsigned char *passedInEIDL, unsigned char *passedInSIDH, unsigned char *passedInSIDL);
// #define ENDFLGDELAYTIME 0xFFFFF
// static unsigned char chdata[64];
// unsigned char cStartFlg=0;
// unsigned long cEndFlg=ENDFLGDELAYTIME;
//
// unsigned long addrpoint=0x1500; //PROG_START
//void ECAN_ISR_ECAN_RXBI(void)
//{
// if(PIR5bits.RXB0IF ==1)
// {
// //temp_EIDH = RXB0EIDH;
// // temp_EIDL = RXB0EIDL;
// BOOTCANH = RXB0SIDH;
// BOOTCANL = RXB0SIDL;
// temp_DLC = RXB0DLC;
// temp_D[0] = RXB0D0;
// temp_D[1] = RXB0D1;
// temp_D[2] = RXB0D2;
// temp_D[3] = RXB0D3;
// temp_D[4] = RXB0D4;
// temp_D[5] = RXB0D5;
// temp_D[6] = RXB0D6;
// temp_D[7] = RXB0D7;
// REflag=1;
// RXB0CONbits.RXB0FUL=0;
// }
// PIR5bits.RXB0IF = 0;
//}
void ECAN_Initialize(void)
{
CANCON = 0x80;
while (0x80 != (CANSTAT & 0xE0)); // wait until ECAN is in config mode
/**
Mode 0
*/
ECANCON = 0x00;
/**
Mask and Filter definitions
........................................................
CAN ID Mask Filter Buffer
........................................................
0x444 Acceptance Mask 0 Filter 0 RXB0
0x555 Acceptance Mask 0 Filter 0 RXB0
0x666 Acceptance Mask 0 Filter 1 RXB1
........................................................
*/
/**
Initialize Receive Masks
*/
RXM0EIDH = 0x00;
RXM0EIDL = 0x00;
RXM0SIDH = 0xfc;
RXM0SIDL = 0x00;
RXM1EIDH = 0xFF;
RXM1EIDL = 0xFF;
RXM1SIDH = 0xFF;
RXM1SIDL = 0xFF;
/**
Initialize Receive Filters
*/
RXFCON0 = 0x03; //Disable all
RXFCON1 = 0x00; //Disable all
RXF0EIDH = 0x00;
RXF0EIDL = 0x00;
RXF0SIDH = 0x9c;
RXF0SIDL = 0x00;
RXF1EIDH = 0x00;
RXF1EIDL = 0x00;
RXF1SIDH = 0x00;
RXF1SIDL = 0x00;
/*RXF2EIDH = 0x00;
RXF2EIDL = 0x00;
RXF2SIDH = 0x00;
RXF2SIDL = 0x00;
RXF3EIDH = 0x00;
RXF3EIDL = 0x00;
RXF3SIDH = 0x00;
RXF3SIDL = 0x00;
RXF4EIDH = 0x00;
RXF4EIDL = 0x00;
RXF4SIDH = 0x00;
RXF4SIDL = 0x00;
RXF5EIDH = 0x00;
RXF5EIDL = 0x00;
RXF5SIDH = 0x00;
RXF5SIDL = 0x00;*/
/**
Initialize CAN Timings
*/
/**
Baud rate: 250kbps
System frequency: 8000000 Hz
Time quanta: 16
Sample point: 1-3-8-4
Sample point: 75.00%
*/
/* BRGCON1 = 0x00;
BRGCON2 = 0xBa;
BRGCON3 = 0x03;*/
/**
Baud rate: 20kbps
System frequency: 8000000 Hz
Time quanta: 10
Sample point: 1-1-6-2
Sample point: 80.00%
*/
/* BRGCON1 = 0x13;
BRGCON2 = 0xA8;
BRGCON3 = 0x01;*/
/**
Baud rate: 500kbps
System frequency: 8000000 Hz
Time quanta: 8
Sample point: 1-1-4-2
Sample point: 75.00%
*/
BRGCON1 = 0x00;
BRGCON2 = 0x98;
BRGCON3 = 0x01;
CANCON = 0x00;
while (0x00 != (CANSTAT & 0xE0)); // wait until ECAN is in Normal mode
RXB0CON = 0x20;
RXB1CON = 0x00;
// PIE5|=0x01;//can接收0中断允许位
PIR5 = 0X00;
}
//void CANincident(void)
//{
//// unsigned char i,candata2=0,candata3=0;
//// unsigned int candata1=0,candata4=0;
// static unsigned char i=0,j=0;
//// static unsigned int k=0;
// if(REflag==1)
// {
// if((BOOTCANH==0x9c)&&(BOOTCANL==0x00))
// {
// if(bootloader_flag == 0)
// {
// if(temp_D[1]==0xAA)
// {
// Erase_Whole_Flash();
// unsigned char ch[]={'A','c','k','-','-','-',0xAA};
// CanSendBuffer(0x7df,ch,sizeof(ch));
// bootloader_flag = 1;
// delay_boot = 200;
// CanSendBuffer(0x7df,temp_D,8);
// }
// }
// else
// {
// if(0==cStartFlg)
// { //初次进入升级,做升级初始化的事情在这里:
// //发送一个启动信息:
// unsigned char ch[]={0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66};
// CanSendBuffer(0x7df,ch,sizeof(ch));
// // Todo:
// // 这段代码只是在启动的时候执行一次初始化的动作,所以以后就用标志位将其关闭
// cStartFlg = 1;
// }
// cEndFlg = ENDFLGDELAYTIME;
// CanSendBuffer(0x7df,temp_D,8);
// { // i是一次CAN接收的buffer的计数器
// // j是一次flash写入的buffer的计数器
// // k是写入总块数的计数器
// // 如果最后不足64个byte,则补足FF之后写入,这个工作由外部程序完成,这样可以节约MCU。
// for(i=0;i<8;i++){chdata[j++]=temp_D[i];}
// if(j>=63)
// {
// // 写入一块,记数+1,0x400~0x800这1K的空间作为Bootloader本身的空间,不必擦写。
//// if ((BOOT64BLOCK_START<=k)&&(k<BOOT64BLOCK_END))
//// {
//// // ToDo: 指针运行在BootLoader区域
//// }
//// else
//// {
// //指针运行在APP程序区域,擦写程序
// Flash_Writex(addrpoint,chdata,64);
//// }
//// // 块内指针运行归零
// j=0;
// // 写入一块,记数+1,0x400~0x800这1K的空间作为Bootloader本身的空间,不必擦写。
//// k++;
// addrpoint+=64;
// }
// }
//
//
// }
//
// }
// REflag=0;
// }
// else
// {
// if(1==cStartFlg)
// {
// // 当升级启动之后,结束标志则进行倒计时,做延时处理
// cEndFlg--;
// if (0==cEndFlg)
// { // 等到计时结束,说明没有信息读入,升级结束:
// //发送一个结束信息:
// unsigned char chs[]={0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77};
// CanSendBuffer(0x7df,chs,sizeof(chs));
// // Todo Bootloader Received finished:
// if (j<63)
// {
// for(i=j;i<=63;i++){chdata[i]=0xFF;}
// Flash_Writex(addrpoint,chdata,64);
// }
// }
// }
// }
//
//}
void CanSendBuffer(uint16_t tx_id, uint8_t * ptr, uint8_t len)
{
TXB0CONbits.TXREQ = 0;
TXB0DLC = len;
TXB0SIDL = (tx_id<<5) & 0xe0;
TXB0SIDH = (tx_id>>3) & 0xff;
TXB0D0 = * ptr;
TXB0D1 = * (ptr+1);
TXB0D2 = * (ptr+2);
TXB0D3 = * (ptr+3);
TXB0D4 = * (ptr+4);
TXB0D5 = * (ptr+5);
TXB0D6 = * (ptr+6);
TXB0D7 = * (ptr+7);
TXB0CONbits.TXREQ = 1; //Set the buffer to transmit
wti
没有合适的资源?快使用搜索试试~ 我知道了~
PIC18F25K80bootloader程序.X.zip
共70个文件
c:9个
h:8个
pre:5个
5星 · 超过95%的资源 需积分: 27 40 下载量 143 浏览量
2019-07-04
16:27:09
上传
评论 2
收藏 870KB ZIP 举报
温馨提示
写这个程序废了好多事,到处查资料看网上的资料也不多,调试成功了就传上来给大家分享一下。
资源推荐
资源详情
资源评论
收起资源包目录
PIC18F25K80bootloader程序.X.zip (70个子文件)
PIC18F25K80bootloader程序.X
Makefile 3KB
mcc_generated_files
pin_manager.h 18KB
eusart1.h 6KB
memory.h 7KB
flash.c 2KB
pin_manager.c 3KB
flash.h 2KB
tmr1.c 2KB
memory.c 7KB
tmr1.h 8KB
interrupt_manager.h 3KB
ecan.h 6KB
mcc.c 5KB
ecan.c 19KB
eusart1.c 5KB
interrupt_manager.c 3KB
mcc.h 3KB
build
default
production
main.p1 711KB
mcc_generated_files
pin_manager.pre 375KB
pin_manager.p1 693KB
pin_manager.p1.d 203B
flash.p1.d 179B
flash.pre 377KB
flash.p1 699KB
mcc.pre 379KB
ecan.p1.d 245B
ecan.pre 379KB
ecan.p1 707KB
mcc.p1 698KB
mcc.p1.d 347B
main.p1.d 290B
main.pre 380KB
dist
default
production
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.sdb 13KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.cmf 87KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.obj 18KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.lst 135KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.elf 21KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.bin 3MB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.map 45KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.hxl 3KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.sym 14KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.hxl 3KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.obj 18KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.lst 135KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.sym 14KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.mum 465B
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.bin 3MB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.hex 4KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.rlf 164KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.cmf 87KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.rlf 164KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.map 45KB
V6812MCfutianbootloader20190703-5-nointerrupt.X.production.sdb 13KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.hex 4KB
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.elf 21KB
memoryfile.xml 490B
V6812MCfutianbootloader20190703-6-nointerrupt.X.production.mum 465B
debug
default
MyConfig.mc3 602KB
nbproject
Makefile-default.mk 17KB
Makefile-local-default.mk 2KB
project.xml 718B
Package-default.bash 2KB
Makefile-impl.mk 2KB
Makefile-variables.mk 575B
Makefile-genesis.properties 455B
configurations.xml 10KB
private
private.xml 1KB
SuppressibleMessageMemo.properties 69B
configurations.xml 1KB
main.c 7KB
共 70 条
- 1
资源评论
- 开始嵌入式2022-08-18大神,麻烦解答下,升级程序擦写完成后,怎么跳转到应用程序,代码中哪部分是这个过程
- IgorSun2020-06-17研究中,没有上位机。。。
zhangbb326
- 粉丝: 2
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功