This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LP-AM243: Question on "XOUT" command for CRC16 Implementation

Part Number: LP-AM243

In this post I figured out how to use the PRU's access to the CRC module to perform a CRC16-CCITT calculation on >4bytes of data.
Below is my working code.

It takes some value I have written to registers r2~r3, and loads the first 5 bytes.
Then it prints the results to R28/R29.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CRC16:
zero &r29, 4 ; Clear out 4 bytes of R29
ldi32 r25, 0x4 ; Load R25 with CRC module configuration
xout 0x1, &r25, 4 ; Send R25 Configuration to CRC Module
ldi32 r28, 0xFFFFFFFF ; Load R28 with SEED value for CRC16-CCITT
xout 0x1, &r28, 4 ; Write R28 to CRC Module (sets SEED)
xout 0x1, &r2, 5 ; Moving 5 bytes starting from R2 into CRC module
NOP ; Add some delay
NOP ; Add some delay
NOP ; Add some delay
NOP ; Add some delay
NOP ; Add some delay
NOP ; Add some delay
xin 0x1, &r28, 4 ; Reading CRC result into R28
xin 0x1, &r29, 4 ; Reading CRC result into R29
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

My problem is with the "xout" command.

 

Fullscreen
1
xout 0x1, &r2, 5 ; Moving 5 bytes starting from R2 into CRC module
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Here, I am specifically declaring I want to send the CRC module "5" bytes of data.
But, is there a way I can make this number a variable?

That is, I would prefer to do something like this:

Fullscreen
1
xout 0x1, &r2, r12 ; Moving xx bytes from R2 into CRC module
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


Basically, I would like to store the data length for the CRC check in a variable, and call that variable.
Is there a way to do this?

Extra Question:
The AM243x has API for CRC calculation on main cores. (link)
Section 12.6.3.3.4 PSA Signature Register from the TRM lists the 64-bit Polynomial used with the CRC module.
Can this polynomial be changed? i.e. use the CCITT polynomial that the PRU CRC module provides?