Hello,
I was able to get RTP to work in Direct Data Mode by setting up the port to be 16 bits and assigning the GLBCTRL register to be as follows: I allow the clock to be free-running, and I disable the RTPENA pin so it can overflow. Writing to DDMW after this configuration (plus enabling the ports for 16 bits, no ENA pin) all pins output except for ENA.
rtpREG->GLBCTRL = ((uint32) 0U \
| (uint32)((uint32)1U << 1U)\
| (uint32)((uint32)0U << 2U)\
| (uint32)((uint32)1U << 3U)\
| (uint32)((uint32)0U << 4U)\
| (uint32)((uint32)0U << 5U)\
| (uint32)((uint32)1U << 6U)\
| (uint32)((uint32)0U << 7U)\
| (uint32)((uint32)1U << 8U)\
| (uint32)((uint32)1U << 9U)\
| (uint32)((uint32)1U << 10U)\
| (uint32)((uint32)1U << 11U)\
| (uint32)((uint32)0U << 12U)\
| (uint32)((uint32)1U << 13U)\
| (uint32)((uint32)0U << 14U)\
| (uint32)((uint32)0U << 15U)\
| (uint32)((uint32)1U << 16U)\
| (uint32)((uint32)1U << 17U)\
| (uint32)((uint32)1U << 18U));
/** - RTP Port output values */
rtpREG->PC3 = (uint32) 0U /* DATA[0] */
| (uint32)((uint32)0U << 1U) /* DATA[1] */
| (uint32)((uint32)0U << 2U) /* DATA[2] */
| (uint32)((uint32)0U << 3U) /* DATA[3] */
| (uint32)((uint32)0U << 4U) /* DATA[4] */
| (uint32)((uint32)0U << 5U) /* DATA[5] */
| (uint32)((uint32)0U << 6U) /* DATA[6] */
| (uint32)((uint32)0U << 7U) /* DATA[7] */
| (uint32)((uint32)0U << 8U) /* DATA[8] */
| (uint32)((uint32)0U << 9U) /* DATA[9] */
| (uint32)((uint32)0U << 10U) /* DATA[10] */
| (uint32)((uint32)0U << 11U) /* DATA[11] */
| (uint32)((uint32)0U << 12U) /* DATA[12] */
| (uint32)((uint32)0U << 13U) /* DATA[13] */
| (uint32)((uint32)0U << 14U) /* DATA[14] */
| (uint32)((uint32)0U << 15U) /* DATA[15] */
| (uint32)((uint32)0U << 16U) /* RTP SYNC */
| (uint32)((uint32)0U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/** - RTP Port direction */
rtpREG->PC1 = (uint32) 1U /* DATA[0] */
| (uint32)((uint32)1U << 1U) /* DATA[1] */
| (uint32)((uint32)1U << 2U) /* DATA[2] */
| (uint32)((uint32)1U << 3U) /* DATA[3] */
| (uint32)((uint32)1U << 4U) /* DATA[4] */
| (uint32)((uint32)1U << 5U) /* DATA[5] */
| (uint32)((uint32)1U << 6U) /* DATA[6] */
| (uint32)((uint32)1U << 7U) /* DATA[7] */
| (uint32)((uint32)1U << 8U) /* DATA[8] */
| (uint32)((uint32)1U << 9U) /* DATA[9] */
| (uint32)((uint32)1U << 10U) /* DATA[10] */
| (uint32)((uint32)1U << 11U) /* DATA[11] */
| (uint32)((uint32)1U << 12U) /* DATA[12] */
| (uint32)((uint32)1U << 13U) /* DATA[13] */
| (uint32)((uint32)1U << 14U) /* DATA[14] */
| (uint32)((uint32)1U << 15U) /* DATA[15] */
| (uint32)((uint32)1U << 16U) /* RTP SYNC */
| (uint32)((uint32)1U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/** - RTP Port open drain enable */
rtpREG->PC6 = (uint32) 0U /* DATA[0] */
| (uint32)((uint32)0U << 1U) /* DATA[1] */
| (uint32)((uint32)0U << 2U) /* DATA[2] */
| (uint32)((uint32)0U << 3U) /* DATA[3] */
| (uint32)((uint32)0U << 4U) /* DATA[4] */
| (uint32)((uint32)0U << 5U) /* DATA[5] */
| (uint32)((uint32)0U << 6U) /* DATA[6] */
| (uint32)((uint32)0U << 7U) /* DATA[7] */
| (uint32)((uint32)0U << 8U) /* DATA[8] */
| (uint32)((uint32)0U << 9U) /* DATA[9] */
| (uint32)((uint32)0U << 10U) /* DATA[10] */
| (uint32)((uint32)0U << 11U) /* DATA[11] */
| (uint32)((uint32)0U << 12U) /* DATA[12] */
| (uint32)((uint32)0U << 13U) /* DATA[13] */
| (uint32)((uint32)0U << 14U) /* DATA[14] */
| (uint32)((uint32)0U << 15U) /* DATA[15] */
| (uint32)((uint32)0U << 16U) /* RTP SYNC */
| (uint32)((uint32)0U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/** - RTP Port pullup / pulldown selection */
rtpREG->PC8 = (uint32) 1U /* DATA[0] */
| (uint32)((uint32)1U << 1U) /* DATA[1] */
| (uint32)((uint32)1U << 2U) /* DATA[2] */
| (uint32)((uint32)1U << 3U) /* DATA[3] */
| (uint32)((uint32)1U << 4U) /* DATA[4] */
| (uint32)((uint32)1U << 5U) /* DATA[5] */
| (uint32)((uint32)1U << 6U) /* DATA[6] */
| (uint32)((uint32)1U << 7U) /* DATA[7] */
| (uint32)((uint32)1U << 8U) /* DATA[8] */
| (uint32)((uint32)1U << 9U) /* DATA[9] */
| (uint32)((uint32)1U << 10U) /* DATA[10] */
| (uint32)((uint32)1U << 11U) /* DATA[11] */
| (uint32)((uint32)1U << 12U) /* DATA[12] */
| (uint32)((uint32)1U << 13U) /* DATA[13] */
| (uint32)((uint32)1U << 14U) /* DATA[14] */
| (uint32)((uint32)1U << 15U) /* DATA[15] */
| (uint32)((uint32)1U << 16U) /* RTP SYNC */
| (uint32)((uint32)1U << 17U) /* RTP CLK */
| (uint32)((uint32)1U << 18U); /* RTP ENA */
/** - RTP Port pullup / pulldown enable*/
rtpREG->PC7 = (uint32) 0U /* DATA[0] */
| (uint32)((uint32)0U << 1U) /* DATA[1] */
| (uint32)((uint32)0U << 2U) /* DATA[2] */
| (uint32)((uint32)0U << 3U) /* DATA[3] */
| (uint32)((uint32)0U << 4U) /* DATA[4] */
| (uint32)((uint32)0U << 5U) /* DATA[5] */
| (uint32)((uint32)0U << 6U) /* DATA[6] */
| (uint32)((uint32)0U << 7U) /* DATA[7] */
| (uint32)((uint32)0U << 8U) /* DATA[8] */
| (uint32)((uint32)0U << 9U) /* DATA[9] */
| (uint32)((uint32)0U << 10U) /* DATA[10] */
| (uint32)((uint32)0U << 11U) /* DATA[11] */
| (uint32)((uint32)0U << 12U) /* DATA[12] */
| (uint32)((uint32)0U << 13U) /* DATA[13] */
| (uint32)((uint32)0U << 14U) /* DATA[14] */
| (uint32)((uint32)0U << 15U) /* DATA[15] */
| (uint32)((uint32)0U << 16U) /* RTP SYNC */
| (uint32)((uint32)0U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/* RTP set all pins to functional */
rtpREG->PC0 = (uint32) 1U /* DATA[0] */
| (uint32)((uint32)1U << 1U) /* DATA[1] */
| (uint32)((uint32)1U << 2U) /* DATA[2] */
| (uint32)((uint32)1U << 3U) /* DATA[3] */
| (uint32)((uint32)1U << 4U) /* DATA[4] */
| (uint32)((uint32)1U << 5U) /* DATA[5] */
| (uint32)((uint32)1U << 6U) /* DATA[6] */
| (uint32)((uint32)1U << 7U) /* DATA[7] */
| (uint32)((uint32)1U << 8U) /* DATA[8] */
| (uint32)((uint32)1U << 9U) /* DATA[9] */
| (uint32)((uint32)1U << 10U) /* DATA[10] */
| (uint32)((uint32)1U << 11U) /* DATA[11] */
| (uint32)((uint32)1U << 12U) /* DATA[12] */
| (uint32)((uint32)1U << 13U) /* DATA[13] */
| (uint32)((uint32)1U << 14U) /* DATA[14] */
| (uint32)((uint32)1U << 15U) /* DATA[15] */
| (uint32)((uint32)1U << 16U) /* RTP SYNC */
| (uint32)((uint32)1U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
However, when I attempt to configure the port for Trace mode, and use a memory address of 0x08001000 and turn on tracing with the following code, when I attempt to write to an address in the 0x08001000 to 0x08001FFF range, I do not see the RTP Trace clock or any data come out.
//Set up Global tracing parameters:
//0 FIFO ram not mapped
//111 HCLK/8 (adjust for faster)
//00 reserved
//00 DDM_WIDTH not required for trace mode
//0 DDM_RW not needed for trace mode
//0 Trace Mode
//11 16 bit wide
//0 out of reset state
//1 clk free running (?)
//0 No Overflow Protection for now
//0 Trace inside of defined region
//1010 Enable Trace ("0xA")
rtpREG->GLBCTRL = ((uint32) 0U \
| (uint32)((uint32)1U << 1U)\
| (uint32)((uint32)0U << 2U)\
| (uint32)((uint32)1U << 3U)\
| (uint32)((uint32)0U << 4U)\
| (uint32)((uint32)0U << 5U)\
| (uint32)((uint32)1U << 6U)\
| (uint32)((uint32)0U << 7U)\
| (uint32)((uint32)1U << 8U)\
| (uint32)((uint32)1U << 9U)\
| (uint32)((uint32)0U << 10U)\
| (uint32)((uint32)0U << 11U)\
| (uint32)((uint32)0U << 12U)\
| (uint32)((uint32)0U << 13U)\
| (uint32)((uint32)0U << 14U)\
| (uint32)((uint32)0U << 15U)\
| (uint32)((uint32)1U << 16U)\
| (uint32)((uint32)1U << 17U)\
| (uint32)((uint32)1U << 18U));
Port config registers are same as before:
/** - RTP Port output values */
rtpREG->PC3 = (uint32) 0U /* DATA[0] */
| (uint32)((uint32)0U << 1U) /* DATA[1] */
| (uint32)((uint32)0U << 2U) /* DATA[2] */
| (uint32)((uint32)0U << 3U) /* DATA[3] */
| (uint32)((uint32)0U << 4U) /* DATA[4] */
| (uint32)((uint32)0U << 5U) /* DATA[5] */
| (uint32)((uint32)0U << 6U) /* DATA[6] */
| (uint32)((uint32)0U << 7U) /* DATA[7] */
| (uint32)((uint32)0U << 8U) /* DATA[8] */
| (uint32)((uint32)0U << 9U) /* DATA[9] */
| (uint32)((uint32)0U << 10U) /* DATA[10] */
| (uint32)((uint32)0U << 11U) /* DATA[11] */
| (uint32)((uint32)0U << 12U) /* DATA[12] */
| (uint32)((uint32)0U << 13U) /* DATA[13] */
| (uint32)((uint32)0U << 14U) /* DATA[14] */
| (uint32)((uint32)0U << 15U) /* DATA[15] */
| (uint32)((uint32)0U << 16U) /* RTP SYNC */
| (uint32)((uint32)0U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/** - RTP Port direction */
rtpREG->PC1 = (uint32) 1U /* DATA[0] */
| (uint32)((uint32)1U << 1U) /* DATA[1] */
| (uint32)((uint32)1U << 2U) /* DATA[2] */
| (uint32)((uint32)1U << 3U) /* DATA[3] */
| (uint32)((uint32)1U << 4U) /* DATA[4] */
| (uint32)((uint32)1U << 5U) /* DATA[5] */
| (uint32)((uint32)1U << 6U) /* DATA[6] */
| (uint32)((uint32)1U << 7U) /* DATA[7] */
| (uint32)((uint32)1U << 8U) /* DATA[8] */
| (uint32)((uint32)1U << 9U) /* DATA[9] */
| (uint32)((uint32)1U << 10U) /* DATA[10] */
| (uint32)((uint32)1U << 11U) /* DATA[11] */
| (uint32)((uint32)1U << 12U) /* DATA[12] */
| (uint32)((uint32)1U << 13U) /* DATA[13] */
| (uint32)((uint32)1U << 14U) /* DATA[14] */
| (uint32)((uint32)1U << 15U) /* DATA[15] */
| (uint32)((uint32)1U << 16U) /* RTP SYNC */
| (uint32)((uint32)1U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/** - RTP Port open drain enable */
rtpREG->PC6 = (uint32) 0U /* DATA[0] */
| (uint32)((uint32)0U << 1U) /* DATA[1] */
| (uint32)((uint32)0U << 2U) /* DATA[2] */
| (uint32)((uint32)0U << 3U) /* DATA[3] */
| (uint32)((uint32)0U << 4U) /* DATA[4] */
| (uint32)((uint32)0U << 5U) /* DATA[5] */
| (uint32)((uint32)0U << 6U) /* DATA[6] */
| (uint32)((uint32)0U << 7U) /* DATA[7] */
| (uint32)((uint32)0U << 8U) /* DATA[8] */
| (uint32)((uint32)0U << 9U) /* DATA[9] */
| (uint32)((uint32)0U << 10U) /* DATA[10] */
| (uint32)((uint32)0U << 11U) /* DATA[11] */
| (uint32)((uint32)0U << 12U) /* DATA[12] */
| (uint32)((uint32)0U << 13U) /* DATA[13] */
| (uint32)((uint32)0U << 14U) /* DATA[14] */
| (uint32)((uint32)0U << 15U) /* DATA[15] */
| (uint32)((uint32)0U << 16U) /* RTP SYNC */
| (uint32)((uint32)0U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/** - RTP Port pullup / pulldown selection */
rtpREG->PC8 = (uint32) 1U /* DATA[0] */
| (uint32)((uint32)1U << 1U) /* DATA[1] */
| (uint32)((uint32)1U << 2U) /* DATA[2] */
| (uint32)((uint32)1U << 3U) /* DATA[3] */
| (uint32)((uint32)1U << 4U) /* DATA[4] */
| (uint32)((uint32)1U << 5U) /* DATA[5] */
| (uint32)((uint32)1U << 6U) /* DATA[6] */
| (uint32)((uint32)1U << 7U) /* DATA[7] */
| (uint32)((uint32)1U << 8U) /* DATA[8] */
| (uint32)((uint32)1U << 9U) /* DATA[9] */
| (uint32)((uint32)1U << 10U) /* DATA[10] */
| (uint32)((uint32)1U << 11U) /* DATA[11] */
| (uint32)((uint32)1U << 12U) /* DATA[12] */
| (uint32)((uint32)1U << 13U) /* DATA[13] */
| (uint32)((uint32)1U << 14U) /* DATA[14] */
| (uint32)((uint32)1U << 15U) /* DATA[15] */
| (uint32)((uint32)1U << 16U) /* RTP SYNC */
| (uint32)((uint32)1U << 17U) /* RTP CLK */
| (uint32)((uint32)1U << 18U); /* RTP ENA */
/** - RTP Port pullup / pulldown enable*/
rtpREG->PC7 = (uint32) 0U /* DATA[0] */
| (uint32)((uint32)0U << 1U) /* DATA[1] */
| (uint32)((uint32)0U << 2U) /* DATA[2] */
| (uint32)((uint32)0U << 3U) /* DATA[3] */
| (uint32)((uint32)0U << 4U) /* DATA[4] */
| (uint32)((uint32)0U << 5U) /* DATA[5] */
| (uint32)((uint32)0U << 6U) /* DATA[6] */
| (uint32)((uint32)0U << 7U) /* DATA[7] */
| (uint32)((uint32)0U << 8U) /* DATA[8] */
| (uint32)((uint32)0U << 9U) /* DATA[9] */
| (uint32)((uint32)0U << 10U) /* DATA[10] */
| (uint32)((uint32)0U << 11U) /* DATA[11] */
| (uint32)((uint32)0U << 12U) /* DATA[12] */
| (uint32)((uint32)0U << 13U) /* DATA[13] */
| (uint32)((uint32)0U << 14U) /* DATA[14] */
| (uint32)((uint32)0U << 15U) /* DATA[15] */
| (uint32)((uint32)0U << 16U) /* RTP SYNC */
| (uint32)((uint32)0U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
/* RTP set all pins to functional */
rtpREG->PC0 = (uint32) 1U /* DATA[0] */
| (uint32)((uint32)1U << 1U) /* DATA[1] */
| (uint32)((uint32)1U << 2U) /* DATA[2] */
| (uint32)((uint32)1U << 3U) /* DATA[3] */
| (uint32)((uint32)1U << 4U) /* DATA[4] */
| (uint32)((uint32)1U << 5U) /* DATA[5] */
| (uint32)((uint32)1U << 6U) /* DATA[6] */
| (uint32)((uint32)1U << 7U) /* DATA[7] */
| (uint32)((uint32)1U << 8U) /* DATA[8] */
| (uint32)((uint32)1U << 9U) /* DATA[9] */
| (uint32)((uint32)1U << 10U) /* DATA[10] */
| (uint32)((uint32)1U << 11U) /* DATA[11] */
| (uint32)((uint32)1U << 12U) /* DATA[12] */
| (uint32)((uint32)1U << 13U) /* DATA[13] */
| (uint32)((uint32)1U << 14U) /* DATA[14] */
| (uint32)((uint32)1U << 15U) /* DATA[15] */
| (uint32)((uint32)1U << 16U) /* RTP SYNC */
| (uint32)((uint32)1U << 17U) /* RTP CLK */
| (uint32)((uint32)0U << 18U); /* RTP ENA */
//map 1K from memory region 8001000, writes only
rtpREG->RAM1REG1 =0x13001000;
//set up trace for RAM block 1
rtpREG->TRENA |=0x01;
When I initialize rtp with rtpInit() and assign a pointer to memory for memory read/write:
uint32_t* MemRegion=(uint32_t *)0x08001000;
And I write to this memory region *MemRegion=0xAA55AA55 (or anywhere in the region from 0x08001000 to 0x08001FFF)
Shouldn't the trace port automatically make a copy of that region and send it to the FIFO for delivery out of the port?
Best,
Josh Karch