от
У меня есть совет по развитию PIC32MK1024GPE100 .Я хочу наладить связи с другой микроконтроллер pic.Я написал код для ТХ, но нет сигнала на выводах canh и CANL(проверяется с помощью осциллографа).На борту имеет встроенный резистор terimnation 120 Ом и Can-трансивер использует MCP2561. Вот код, который я написал
    #ifndef _CAN1_H    /* Guard against multiple inclusion */
#define _CAN1_H
struct txCMSGSID{
    unsigned sid:11;
    unsigned:21;
};
struct txCMSGEID{

   unsigned dlc:4;
   unsigned rb0:1;
   unsigned :3;
   unsigned rb1:1;
   unsigned rtr:1;
   unsigned eid:18;
   unsigned ide:1;
   unsigned srr:1;
   unsigned :2;
};
struct txCMSGDATA0{
    unsigned databyte0:8;
    unsigned databyte1:8;
    unsigned databyte2:8;
    unsigned databyte3:8;
};
struct txCMSGDATA1{
    unsigned databyte4:8;
    unsigned databyte5:8;
    unsigned databyte6:8;
    unsigned databyte7:8;
};
union uCANtxMessageBuffer{
    struct{
        struct txCMSGSID CMSGSID;
        struct txCMSGEID CMSGEID;
        struct txCMSGDATA0 CMSDATA0;
        struct txCMSGDATA1 CMSDATA1;
    };
    int MessageWord[4];
};
#endif

    #include 
#include 
#include 
#include "can1.h"
#include "kmem1.h"
//#include 

//int message;//tracks the message buffer
unsigned int CanFifo[16];
//unsigned int *currentMessageBuffer;//points to the message buffer to be written
//  setting t1=0.5us as PBCLK5=20MHz and BRP=4;
union uCANtxMessageBuffer *transmitMessage;
void can_init()
{
    PB5DIVbits.PBDIV=0;//Setting PBCLK5=SYSCLK i.e. at 20MHz
    PB5DIVbits.ON=1;
    C3CONbits.ON=1;
    C3CONbits.REQOP=4;//Set to Configuration Mode
    while(C3CONbits.OPMOD!=4);
    C3CFGbits.SEG2PH=1;
    C3CFGbits.SEG2PHTS=1;
    C3CFGbits.SEG1PH=1;
    C3CFGbits.PRSEG=2;
    C3CFGbits.SAM=0;
    C3CFGbits.SJW=0;
    C3CFGbits.BRP=4;
    C3FIFOCON0bits.FSIZE = 2;//2 MESSAGE BUFFER OF FIFO0
    C3FIFOCON0bits.TXEN=1;//setting it as a transmit buffer
    //C3FIFOCON1bits.FSIZE=1;//2 MESSSAGE BUFFER OF FIFO1
    //C3FIFOCON1bits.TXEN=1;//setting it as a transmit buffer
    //C3FIFOCON2bits.FSIZE=2;//3 MESSAGE BUFFER OF FIFO2
    //C3FIFOCON2bits.TXEN=0;//setting it as a receiver buffer
    //C3FIFOCON3bits.FSIZE=2;//3 MESSAGE BUFFER OF FIFO3
    //C3FIFOCON3bits.TXEN=0;//setting it as a receiver buffer


 }

    void main(void)
{

  while(1){


      C3FIFOBA = KVA_TO_PA(CanFifo);


     C3CONbits.REQOP = 0;


     while(C3CONbits.OPMOD != 0);
        //transmission of 1st message
        //message to be transmitted is =0x12BC1245

        transmitMessage = (union uCANtxMessageBuffer*)(PA_TO_KVA1(C3FIFOUA0));
        transmitMessage

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...