CAN header and EXT asm question


+ Reply to Thread
Results 1 to 5 of 5
  1. #1
    Join Date
    Apr 2022
    Posts
    14

    Default CAN header and EXT asm question

    I have been working on a CAN file that I can include for a PIC18F46K80 that has an internal ECAN module. The SFR registers for this function total to approximately 278 registers! Fortunately, many of them repeat their function. Since I don't want to hardcode all these registers, I have been looking for a way to address them like an array. In the main code you have a variable that determines which block of registers you are sending the data to. It was suggested to me to use the EXT function and offsets to accomplish this.

    Code:
    @CAN_Buffer = B2D0                  'load CAN_Buffer with the address of B2D0
    CAN_Buffer VAR BYTE EXT            'tell PBP it is byte sized but doesn't need to assign space
    I think I can then point at the next address by using CAN_Buffer+1 = .......

    Now the catch. In the 18f46k80 and probably others, the SFR's cross bank segments. Do I have to declare the bank to use the EXT function? I have the CAN bus speed selection worked out but now want to be able to point at the various buffer spaces. Any ideas?

    Thanks

  2. #2
    Join Date
    May 2013
    Location
    australia
    Posts
    2,562


    Did you find this post helpful? Yes | No

    Default Re: CAN header and EXT asm question

    what you propose makes little sense to me, keep in mind my canbus knowledge is poor.

    1. there are only 8 B2Dx type registers , to index past that leads you to all sorts of different register types
    2. B2D0 is neither the top or the bottom of the BnDx type registers why start there

    something like
    @CAN_BufferB2 = B2D0 'load CAN_Buffer with the address of B2D0
    @CAN_BufferB1 = B1D0
    CAN_BufferB2 VAR BYTE EXT 'tell PBP it is byte sized but doesn't need to assign space
    CAN_BufferB1 VAR BYTE EXT
    might make mores sense

    I think I can then point at the next address by using CAN_Buffer+1 = .......
    more like CAN_BufferB2[0+index] = .......

    or

    CAN_BufferB1[index] = .......
    index=index+1


    Its hard to see what you would gain.
    Warning I'm not a teacher

  3. #3
    Join Date
    Apr 2022
    Posts
    14


    Did you find this post helpful? Yes | No

    Default Re: CAN header and EXT asm question

    Hi Richard,

    you are correct that there are only 8 registers like B1 or B2 D0. Those are only the data registers for one buffer. There are, however, 276 registers associated with the other elements in the CAN module. Mask registers, filter registers, registers that can be either transmit or receive. There are 14 registers associated with the B0 buffer. B0CON, B0D0 - B0D7, B0DLC, high and low address bytes and high and low extended address bytes. There are six "B" arrays. What I want to do is point at one of registers and load them with the 14 bytes of data from a Temp_CAN array with 14 elements. That way I can make use of any of the buffers without having to hard code B0CON .... B1CON .... etc. I hope this makes more sense now.

    Thanks,
    Paul

  4. #4
    Join Date
    May 2013
    Location
    australia
    Posts
    2,562


    Did you find this post helpful? Yes | No

    Default Re: CAN header and EXT asm question

    as long as the pattern is consistent over the entire range then it should work
    pic18 arrays are not bank limited so as long as you use array indexing methods the banking should no be an issue
    Warning I'm not a teacher

  5. #5
    Join Date
    Apr 2022
    Posts
    14


    Did you find this post helpful? Yes | No

    Default Re: CAN header and EXT asm question

    Thanks Richard, that was what I was hoping to hear! I'll get back to work on the CAN program now!

    Paul

Similar Threads

  1. A header wizard
    By cncmachineguy in forum PBP Wish List
    Replies: 229
    Last Post: - 24th February 2011, 05:21
  2. ASM question
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 8th February 2011, 18:37
  3. Question about using ASM interupt with PBP
    By cncmachineguy in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 4th December 2010, 19:04
  4. ASM question
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 10
    Last Post: - 23rd March 2010, 01:33
  5. question about how to implement ASM and ENDASM
    By karenhornby in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 9th March 2008, 10:21

Members who have read this thread : 9

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts