提交 e2f2b1a9 作者: 高增攀

123

上级 e7758fb7
......@@ -87,6 +87,9 @@ StructMemory UserParamDef =
.Module = {eDCModType_Incre,1},
.SingleMaxCurrt = 2000,
.SOCMAX = 100,
.PillarCommAddr = 0;
.PillarCommAddr_B = 0;
};
......@@ -157,6 +160,8 @@ StructMemory UserParam =
.Module = {eDCModType_Incre,1},
.SingleMaxCurrt = 2000,
.SOCMAX = 100,
.PillarCommAddr = 0;
.PillarCommAddr_B = 0;
};
StructFlashRecdParam TempChgRecdParam = //历史充电记录参数
......
......@@ -247,6 +247,8 @@ typedef struct
StructModul Module;
u16 SingleMaxCurrt;
u16 SOCMAX;
u8 PillarCommAddr;//分体桩通讯地址
u8 PillarCommAddr_B;//分体桩通讯地址
}StructMemory;
extern StructMemory UserParam;
......
......@@ -51,12 +51,12 @@ void DcModuleRxIrqHandle(void)
//StructDcModuleStatus Data;
u8 RecvFlag;
IrSta = MCP2515_ReadStatus();
IrSta = MCP2515_B_ReadStatus();
if (IrSta & 0x01)
{
RecvFlag = MCP2515_Receive(0, &RxMsg);
MCP2515_BitModify(CANINTF, 0x01, 0x00);
RecvFlag = MCP2515_B_Receive(0, &RxMsg);
MCP2515_B_BitModify(CANINTF, 0x01, 0x00);
if (TRUE == RecvFlag)
......@@ -82,8 +82,8 @@ void DcModuleRxIrqHandle(void)
}
else if (IrSta & 0x02)
{
RecvFlag = MCP2515_Receive(1, &RxMsg);
MCP2515_BitModify(CANINTF, 0x02, 0x00);
RecvFlag = MCP2515_B_Receive(1, &RxMsg);
MCP2515_B_BitModify(CANINTF, 0x02, 0x00);
if (TRUE == RecvFlag)
{
......@@ -113,19 +113,17 @@ void DcModuleRxIrqHandle(void)
void DcModuleCanInit(void)
{
DcModleVoltChkCnt = 0;
DcModuleGroupDateInit();
MCP2515_EnterCritical();
MCP2515_B_EnterCritical();
MCP2515_SetInt(DcModuleRxIrqHandle, DISABLE);
MCP2515_B_SetInt(TCURxIrqHandle, DISABLE);
MCP2515_SpiInit(); //初始化MCU的SPI总线
MCP2515_B_SpiInit(); //初始化MCU的SPI总线
MCP2515_Reset(); // MCP2515 启动前进行软件复位
MCP2515_B_Reset(); // MCP2515 启动前进行软件复位
//使用位修改指令将MCP2515设置为配置模式
//也就是将CANCTRL寄存器的REQOP[2:0]设置为100
MCP2515_BitModify(CANCTRL, 0xE0, (1 << REQOP2));
MCP2515_B_BitModify(CANCTRL, 0xE0, (1 << REQOP2));
/*
//计算并设置MCP2515的位时间
......@@ -134,75 +132,75 @@ void DcModuleCanInit(void)
// 分频控制器 CNF1.BRP[5:0] = 7
// 最小时间份额 TQ = 2 * ( BRP + 1 ) / Fosc = 2*(7+1)/16M = 1uS
// 同步段 Sync Seg = 1TQ
// 传播段 Prop Seg = ( PRSEG + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ = 3 TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ = 3 TQ
// 传播段 Prop Seg = ( PRSEG + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ = 1 TQ
// 同步跳转长度设置为 CNF1.SJW[1:0] = 00, 即 1TQ
// 总线波特率 NBR = Fbit = 1/(sync seg + Prop seg + PS1 + PS2 )
// = 1/(8TQ) = 1/8uS = 125kHz
// 总线波特率 NBR = Fbit = 1/(sync seg + Prop seg + PS1 + PS2 )
// = 1/(4TQ) = 1/4uS = 250kHz
//设置分频控制器CNF1.BRP[5:0] = 7,同步跳转长度设置为 CNF1.SJW[1:0] = 00
MCP2515_WriteReg( CNF1, (1<<BRP0)|(1<<BRP1)|(1<<BRP2) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(1<<PHSEG11) );
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (1<<PHSEG21) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度1TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(0<<PHSEG10) );
// 设置 相位缓冲段 Phase Seg2为 1TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (0<<PHSEG20) );
*/
MCP2515_WriteReg(CNF1, (1 << BRP0) | (1 << BRP1) | (1 << BRP2)); //125K
MCP2515_B_WriteReg(CNF1, (1 << BRP0) | (1 << BRP1) | (1 << BRP2));
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_WriteReg(CNF2, (1 << BTLMODE) | (1 << PHSEG11));
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度1TQ
MCP2515_B_WriteReg(CNF2, (1 << BTLMODE) | (0 << PHSEG11));
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_WriteReg(CNF3, (1 << PHSEG21));
// 设置 相位缓冲段 Phase Seg2为 1TQ , 禁用唤醒滤波器
MCP2515_B_WriteReg(CNF3, (0 << PHSEG21));
// 设置MCP2515中断使能寄存器,使能接收缓冲器中断
MCP2515_WriteReg(CANINTE, (1 << RX1IE) | (1 << RX0IE));
MCP2515_B_WriteReg(CANINTE, (1 << RX1IE) | (1 << RX0IE));
//设置数据接收相关寄存器
// 设置RXM[1:0]=11,关闭接收缓冲器0屏蔽/滤波功能,接收所有报文;禁止滚存功能
//MCP2515_WriteReg(RXB0CTRL, (1<<RXM1)|(1<<RXM0));
MCP2515_WriteReg(RXB0CTRL, (1 << RXM1) | (1 << RXM0) | (1 << BUKT));
MCP2515_B_WriteReg(RXB0CTRL, (1 << RXM1) | (1 << RXM0) | (1 << BUKT));
// 设置RXM[1:0]=11,关闭接收缓冲器1屏蔽/滤波功能,接收所有报文;
MCP2515_WriteReg(RXB1CTRL, (1 << RXM1) | (1 << RXM0));
MCP2515_B_WriteReg(RXB1CTRL, (1 << RXM1) | (1 << RXM0));
u8 Temp[4] =
{
0, 0, 0, 0
};
//设置6个验收滤波寄存器为0,
MCP2515_WriteBuffer(RXF0SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF1SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF2SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF3SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF4SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF5SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF0SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF1SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF2SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF3SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF4SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF5SIDH, Temp, 4);
//设置2个验收滤波寄存器为0,
MCP2515_WriteBuffer(RXM0SIDH, Temp, 4);
MCP2515_WriteBuffer(RXM1SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXM0SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXM1SIDH, Temp, 4);
//配置引脚
//设置接收相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_WriteReg(BFPCTRL, 0);
MCP2515_B_WriteReg(BFPCTRL, 0);
//调试使用,设置BFPCTRL使RX0BF,RX1BF设置为数字输出。
//MCP2515_BitModify( BFPCTRL, (1<<B1BFE)|(1<<B0BFE)|(1<<B1BFM)|(1<<B0BFM), (1<<B1BFE)|(1<<B0BFE) );
//设置发送相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_WriteReg(TXRTSCTRL, 0);
MCP2515_B_WriteReg(TXRTSCTRL, 0);
//MCP2515进入环回模式,进行功能测试
//MCP2515_BitModify(CANCTRL, 0XE0, (1<<REQOP1));
//MCP2515进入正常模式
MCP2515_BitModify(CANCTRL, 0xE0, 0);
MCP2515_B_BitModify(CANCTRL, 0xE0, 0);
MCP2515_SetInt(DcModuleRxIrqHandle, ENABLE);
MCP2515_B_SetInt(DcModuleRxIrqHandle, ENABLE);
MCP2515_ExitCritical();
MCP2515_B_ExitCritical();
MCP2515_SpiHightSpeedInit();
MCP2515_B_SpiHightSpeedInit();
}
......
......@@ -32,7 +32,7 @@ u8 TCUSendMsg(StructChargeSend * pMsg)
TxMsg.Data[6] = pMsg->Data[6];
TxMsg.Data[7] = pMsg->Data[7];
if (CAN_TxStatus_NoMailBox != MCP2515_B_Transmit(&TxMsg))
if (CAN_TxStatus_NoMailBox != MCP2515_Transmit(&TxMsg))
return TRUE;
return FALSE; //未发送成功,返回FALSE
......@@ -50,13 +50,13 @@ void TCURxIrqHandle(void)
{
.Mult = 0,
};
IrSta = MCP2515_B_ReadStatus();
IrSta = MCP2515_ReadStatus();
portBASE_TYPE taskWoken = pdFALSE;
if (IrSta & 0x01)
{
MCP2515_B_Receive(0, &RxMsg);
MCP2515_B_BitModify(CANINTF, 0x01, 0x00);
MCP2515_Receive(0, &RxMsg);
MCP2515_BitModify(CANINTF, 0x01, 0x00);
if ((CAN_ID_STD == RxMsg.IDE) || (CAN_RTR_REMOTE == RxMsg.RTR))
return;
......@@ -153,8 +153,8 @@ void TCURxIrqHandle(void)
if (IrSta & 0x02)
{
MCP2515_B_Receive(1, &RxMsg);
MCP2515_B_BitModify(CANINTF, 0x02, 0x00);
MCP2515_Receive(1, &RxMsg);
MCP2515_BitModify(CANINTF, 0x02, 0x00);
if ((CAN_ID_STD == RxMsg.IDE) || (CAN_RTR_REMOTE == RxMsg.RTR))
return;
......@@ -256,17 +256,20 @@ void TCURxIrqHandle(void)
void TCUCanInit(void)
{
MCP2515_B_EnterCritical();
DcModuleGroupDateInit();
MCP2515_EnterCritical();
MCP2515_B_SetInt(TCURxIrqHandle, DISABLE);
MCP2515_SetInt(DcModuleRxIrqHandle, DISABLE);
MCP2515_B_SpiInit(); //初始化MCU的SPI总线
MCP2515_SpiInit(); //初始化MCU的SPI总线
MCP2515_B_Reset(); // MCP2515 启动前进行软件复位
MCP2515_Reset(); // MCP2515 启动前进行软件复位
//使用位修改指令将MCP2515设置为配置模式
//也就是将CANCTRL寄存器的REQOP[2:0]设置为100
MCP2515_B_BitModify(CANCTRL, 0xE0, (1 << REQOP2));
MCP2515_BitModify(CANCTRL, 0xE0, (1 << REQOP2));
/*
//计算并设置MCP2515的位时间
......@@ -275,75 +278,75 @@ void TCUCanInit(void)
// 分频控制器 CNF1.BRP[5:0] = 7
// 最小时间份额 TQ = 2 * ( BRP + 1 ) / Fosc = 2*(7+1)/16M = 1uS
// 同步段 Sync Seg = 1TQ
// 传播段 Prop Seg = ( PRSEG + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ = 1 TQ
// 传播段 Prop Seg = ( PRSEG + 1 ) * TQ = 1 TQ
// 相位缓冲段 Phase Seg1 = ( PHSEG1 + 1 ) * TQ = 3 TQ
// 相位缓冲段 Phase Seg2 = ( PHSEG2 + 1 ) * TQ = 3 TQ
// 同步跳转长度设置为 CNF1.SJW[1:0] = 00, 即 1TQ
// 总线波特率 NBR = Fbit = 1/(sync seg + Prop seg + PS1 + PS2 )
// = 1/(4TQ) = 1/4uS = 250kHz
// 总线波特率 NBR = Fbit = 1/(sync seg + Prop seg + PS1 + PS2 )
// = 1/(8TQ) = 1/8uS = 125kHz
//设置分频控制器CNF1.BRP[5:0] = 7,同步跳转长度设置为 CNF1.SJW[1:0] = 00
MCP2515_WriteReg( CNF1, (1<<BRP0)|(1<<BRP1)|(1<<BRP2) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度1TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(0<<PHSEG10) );
// 设置 相位缓冲段 Phase Seg2为 1TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (0<<PHSEG20) );
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_WriteReg( CNF2, (1<<BTLMODE)|(1<<PHSEG11) );
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_WriteReg( CNF3, (1<<PHSEG21) );
*/
MCP2515_B_WriteReg(CNF1, (1 << BRP0) | (1 << BRP1) | (1 << BRP2));
MCP2515_WriteReg(CNF1, (1 << BRP0) | (1 << BRP1) | (1 << BRP2)); //125K
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度1TQ
MCP2515_B_WriteReg(CNF2, (1 << BTLMODE) | (0 << PHSEG11));
// 设置传播段 Prop Seg 为00,即1TQ,相位缓冲段 Phase Seg1的长度3TQ
MCP2515_WriteReg(CNF2, (1 << BTLMODE) | (1 << PHSEG11));
// 设置 相位缓冲段 Phase Seg2为 1TQ , 禁用唤醒滤波器
MCP2515_B_WriteReg(CNF3, (0 << PHSEG21));
// 设置 相位缓冲段 Phase Seg2为 3TQ , 禁用唤醒滤波器
MCP2515_WriteReg(CNF3, (1 << PHSEG21));
// 设置MCP2515中断使能寄存器,使能接收缓冲器中断
MCP2515_B_WriteReg(CANINTE, (1 << RX1IE) | (1 << RX0IE));
MCP2515_WriteReg(CANINTE, (1 << RX1IE) | (1 << RX0IE));
//设置数据接收相关寄存器
// 设置RXM[1:0]=11,关闭接收缓冲器0屏蔽/滤波功能,接收所有报文;禁止滚存功能
//MCP2515_WriteReg(RXB0CTRL, (1<<RXM1)|(1<<RXM0));
MCP2515_B_WriteReg(RXB0CTRL, (1 << RXM1) | (1 << RXM0) | (1 << BUKT));
MCP2515_WriteReg(RXB0CTRL, (1 << RXM1) | (1 << RXM0) | (1 << BUKT));
// 设置RXM[1:0]=11,关闭接收缓冲器1屏蔽/滤波功能,接收所有报文;
MCP2515_B_WriteReg(RXB1CTRL, (1 << RXM1) | (1 << RXM0));
MCP2515_WriteReg(RXB1CTRL, (1 << RXM1) | (1 << RXM0));
u8 Temp[4] =
{
0, 0, 0, 0
};
//设置6个验收滤波寄存器为0,
MCP2515_B_WriteBuffer(RXF0SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF1SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF2SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF3SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF4SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXF5SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF0SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF1SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF2SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF3SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF4SIDH, Temp, 4);
MCP2515_WriteBuffer(RXF5SIDH, Temp, 4);
//设置2个验收滤波寄存器为0,
MCP2515_B_WriteBuffer(RXM0SIDH, Temp, 4);
MCP2515_B_WriteBuffer(RXM1SIDH, Temp, 4);
MCP2515_WriteBuffer(RXM0SIDH, Temp, 4);
MCP2515_WriteBuffer(RXM1SIDH, Temp, 4);
//配置引脚
//设置接收相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_B_WriteReg(BFPCTRL, 0);
MCP2515_WriteReg(BFPCTRL, 0);
//调试使用,设置BFPCTRL使RX0BF,RX1BF设置为数字输出。
//MCP2515_BitModify( BFPCTRL, (1<<B1BFE)|(1<<B0BFE)|(1<<B1BFM)|(1<<B0BFM), (1<<B1BFE)|(1<<B0BFE) );
//设置发送相关引脚控制寄存器,配置它们禁用第二功能
MCP2515_B_WriteReg(TXRTSCTRL, 0);
MCP2515_WriteReg(TXRTSCTRL, 0);
//MCP2515进入环回模式,进行功能测试
//MCP2515_BitModify(CANCTRL, 0XE0, (1<<REQOP1));
//MCP2515进入正常模式
MCP2515_B_BitModify(CANCTRL, 0xE0, 0);
MCP2515_BitModify(CANCTRL, 0xE0, 0);
MCP2515_B_SetInt(TCURxIrqHandle, ENABLE);
MCP2515_SetInt(TCURxIrqHandle, ENABLE);
MCP2515_B_ExitCritical();
MCP2515_ExitCritical();
MCP2515_B_SpiHightSpeedInit();
MCP2515_SpiHightSpeedInit();
}
......
......@@ -120,8 +120,8 @@ int main(void)
osThreadDef(Thd_Charge_B, Thd_Charge_B, osPriorityHigh, 0, 2*configMINIMAL_STACK_SIZE);
osThreadCreate(osThread(Thd_Charge_B), NULL);
//osThreadDef(Thd_Mult, Thd_Mult, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
// osThreadCreate(osThread(Thd_Mult), NULL);
osThreadDef(Thd_Mult, Thd_Mult, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
osThreadCreate(osThread(Thd_Mult), NULL);
osThreadDef(Thd_Lcd, Thd_Lcd, osPriorityNormal, 0, 2*configMINIMAL_STACK_SIZE);
osThreadCreate(osThread(Thd_Lcd), NULL);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论