Is there either a DAVE 3.1.10, or a CMSIS firmware query to the processor that will return a unique chip identification serial number to distinguish on XMC4500 from another?
↧
XMC4500 unique chip identifier
↧
XMC PWM_CCU4/PWM_CCU8 APP lowest frequency limited to 1 Hz
Hi,
I believe there is an issue in the XMC's PWM_CCU4 (or PWM_CCU8) APP has issue, it doesn't allow the frequency below 1Hz.
But based on hardware Prescalar limit (32768) and Time Period limit (65535), I feel hardware can support the same.
Let me know if its possible.
Thanks in advance for your help.Attachment 3227
I believe there is an issue in the XMC's PWM_CCU4 (or PWM_CCU8) APP has issue, it doesn't allow the frequency below 1Hz.
But based on hardware Prescalar limit (32768) and Time Period limit (65535), I feel hardware can support the same.
Let me know if its possible.
Thanks in advance for your help.Attachment 3227
↧
↧
TriBoard TC2X5 V2.0 HelloSerial_Tricore Example is not Working
Hello Everyone
↧
Problem with the FIFO using USIC on XC2365A
Did you check the datasheet for XC2365A?
↧
Bluetooth Control
Hi
I just tried to use my phone (Samsung Galaxy S4, Android 5.0.1) for flying the Larix copter. The app installed without problems.
When I switch on the copter, I see a bluetooth-device named "RNBT-D13D" or "RNBT-CEFF", which is probably just some generic name of the BT-module. The app obviously wants something called "XMC-Bluetooth".
Do I have to make some special settings in cleanflight? Or more generally, are there some written guidelines on getting the control via bluetooth to work?
A while ago I flew the flyingPCB (pre-cleanflight) using the phone, which worked fine. Has the bluetooth-code actually been ported to cleanflight or do I need another special version?
Regards,
Michael
I just tried to use my phone (Samsung Galaxy S4, Android 5.0.1) for flying the Larix copter. The app installed without problems.
When I switch on the copter, I see a bluetooth-device named "RNBT-D13D" or "RNBT-CEFF", which is probably just some generic name of the BT-module. The app obviously wants something called "XMC-Bluetooth".
Do I have to make some special settings in cleanflight? Or more generally, are there some written guidelines on getting the control via bluetooth to work?
A while ago I flew the flyingPCB (pre-cleanflight) using the phone, which worked fine. Has the bluetooth-code actually been ported to cleanflight or do I need another special version?
Regards,
Michael
↧
↧
disable ECC TC39XX
Hi
How can I disable ECC safey error in TC39XX
I used to disable it in TC27 using this cocde
now I'm tying to disable it on TC39XX with this code DMU_HF_ECCC.B.ECCCORDIS = 0x01; but it's not working
should I set PECENCDIS and DECENCDIS flags ??
Attachment 3234Attachment 3234
thanks
How can I disable ECC safey error in TC39XX
I used to disable it in TC27 using this cocde
Code:
/* Deactivate ECC safety errors */
Mcal_ResetENDINIT();
FLASH0_ECCRP0.B.ECCORDIS |= IFX_FLASH_ECCRP_ECCORDIS_MSK;
FLASH0_ECCRP1.B.ECCORDIS |= IFX_FLASH_ECCRP_ECCORDIS_MSK;
Mcal_SetENDINIT();
now I'm tying to disable it on TC39XX with this code DMU_HF_ECCC.B.ECCCORDIS = 0x01; but it's not working
should I set PECENCDIS and DECENCDIS flags ??
Attachment 3234Attachment 3234
thanks
↧
Upgrading GCC in DAVE4
Hi,
Since a few months a new version of GCC is available 6-2017-q2-update, https://developer.arm.com/open-sourc...u-rm/downloads
Regards,
Jesus
Since a few months a new version of GCC is available 6-2017-q2-update, https://developer.arm.com/open-sourc...u-rm/downloads
Regards,
Jesus
↧
problem with apps upgrade
Hi,
I try to upgrade the APPs of my project but with no success.
The "APPs upgrade" commands give me an error "APPs upgrade failed" and in the log report there's this error:
Solver Error while setting the GUI value to APP!
I have a lot of project like this and I can't upgrade the apps.
How can I do to solve this problem?
In attachment an example project with the same problem.
I try to upgrade the APPs of my project but with no success.
The "APPs upgrade" commands give me an error "APPs upgrade failed" and in the log report there's this error:
Solver Error while setting the GUI value to APP!
I have a lot of project like this and I can't upgrade the apps.
How can I do to solve this problem?
In attachment an example project with the same problem.
↧
Detect that device has been disconnected from PC USB Host
Has anyone found a solution/workaround to this problem?
↧
↧
I2C TX problem
Hello,
This is my workaround solution. I am using TX FIFO. Before each tx I check result of previous tx
// workaround to get transmission running again after it gets stuck after some error on i2c (usually ERR)
// last byte transmitted is stop with data equal to zero
// if content of transmit buffer if different from zero means transmission is stuck
if(USIC1_CH0->TBUF[0] & 0x000000FFUL){
// disable and enable USIC channel, not sure if NOPs are needed
USIC1_CH0->CCR &= ~((uint32_t)USIC_CH_CCR_MODE_Msk);
__NOP();
__NOP();
__NOP();
USIC1_CH0->CCR |= ((uint32_t)(I2C_MODE) & USIC_CH_CCR_MODE_Msk);
}
adjust for your USIC and channel
rum
This is my workaround solution. I am using TX FIFO. Before each tx I check result of previous tx
// workaround to get transmission running again after it gets stuck after some error on i2c (usually ERR)
// last byte transmitted is stop with data equal to zero
// if content of transmit buffer if different from zero means transmission is stuck
if(USIC1_CH0->TBUF[0] & 0x000000FFUL){
// disable and enable USIC channel, not sure if NOPs are needed
USIC1_CH0->CCR &= ~((uint32_t)USIC_CH_CCR_MODE_Msk);
__NOP();
__NOP();
__NOP();
USIC1_CH0->CCR |= ((uint32_t)(I2C_MODE) & USIC_CH_CCR_MODE_Msk);
}
adjust for your USIC and channel
rum
↧
XMC1400 UART receive and character problem
Hello,
I am working with XMC1400 bootkit for an UART application. My aim is to receive an end character like <CR>=0x0D. I am trying to use UART_AbortReceive. Here are the DAVE App and code:
Attachment 3235
Now if I enter exactly 5 character (let's say 12345 or 1234\r) regardless of ending character I receive my txdata on the terminal program. But other than this I got nothing. Any help will be appreciated.
I am working with XMC1400 bootkit for an UART application. My aim is to receive an end character like <CR>=0x0D. I am trying to use UART_AbortReceive. Here are the DAVE App and code:
Attachment 3235
Code:
/*
* main.c
*
*/
#include <DAVE.h> //Declarations from DAVE Code Generation (includes SFR declaration)
/**
* @brief main() - Application entry point
*
* <b>Details of function</b><br>
* This routine is the application entry point. It is invoked by the device startup code. It is responsible for
* invoking the APP initialization dispatcher routine - DAVE_Init() and hosting the place-holder for user application
* code.
*/
uint8_t txdata[] = "Hello";
uint8_t rxdata[5];
int main(void)
{
DAVE_STATUS_t status;
status = DAVE_Init(); /* Initialization of DAVE APPs */
if(status != DAVE_STATUS_SUCCESS)
{
/* Placeholder for error handler code. The while loop below can be replaced with an user error handler. */
XMC_DEBUG("DAVE APPs initialization failed\n");
while(1U)
{
}
}
UART_Transmit(&UART_0, txdata, sizeof(txdata));
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_0);
/* Placeholder for user application code. The while loop below can be replaced with user application code. */
while(1U)
{
while(UART_0.runtime->rx_busy)
{
//If user enters <CR> character, accept the value
if((UART_0.runtime->rx_data_index > 0) && (UART_0.runtime->rx_data[UART_0.runtime->rx_data_index - 1] == 0x0D))
{
//End reception of data on finding <CR> character
UART_AbortReceive(&UART_0);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_0);
}
}
}
}
void endoftransmit (void)
{
UART_Receive(&UART_0, rxdata, sizeof(rxdata));
}
void endofreceive (void)
{
UART_Transmit(&UART_0, txdata, sizeof(txdata));
}
↧
xmc1300 and Vadc
Hello
im doing the VADC driver for XMC1300 microcontroller but I got one question. My supply voltage is 3v3 and im using resolution of 12 bit. I need to read 2 signals in parallel and three on demand mode.
- When i read ADC conversion result the scaling is not done correctly. 3.3 volts do not correspond to 0xFFF. What i need to do to solve this? I need to add some reference to the peripheral?
here is my code:
#include <xmc_gpio.h>
#include <xmc_vadc.h>
XMC_VADC_GLOBAL_CONFIG_t g_global_handle;
XMC_VADC_GROUP_CONFIG_t g_group_handle;
XMC_VADC_QUEUE_CONFIG_t g_queue_handle = {
.trigger_signal = XMC_VADC_REQ_TR_I,
.trigger_edge = XMC_VADC_TRIGGER_EDGE_ANY,
.external_trigger = 1, };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch0_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 0,
.sync_conversion = 1, };
XMC_VADC_CHANNEL_CONFIG_t g_g1_ch0_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 0, };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_0_handle = {
.channel_num = 0,
.refill_needed = 1,
.external_trigger = 0 };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch2_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 2 };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_2_handle = {
.channel_num = 2,
.refill_needed = 1,
.external_trigger = 0 };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch3_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 3 };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_3_handle = {
.channel_num = 3,
.refill_needed = 1,
.external_trigger = 0 };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch4_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 4 };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_4_handle = {
.channel_num = 4,
.refill_needed = 1,
.external_trigger = 0 };
void Init_ADC (void)
{
XMC_VADC_GLOBAL_Init(VADC, &g_global_handle);
XMC_VADC_GROUP_Init(VADC_G0, &g_group_handle);
XMC_VADC_GROUP_Init(VADC_G1, &g_group_handle);
XMC_VADC_GLOBAL_StartupCalibration(VADC);
XMC_VADC_GROUP_QueueInit(VADC_G0, &g_queue_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 0, &g_g0_ch0_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G1, 0, &g_g1_ch0_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 2, &g_g0_ch2_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 3, &g_g0_ch3_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 4, &g_g0_ch4_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_0_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_2_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_3_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_4_handle);
XMC_VADC_GROUP_SetPowerMode(VADC_G0, XMC_VADC_GROUP_POWERMODE_NORMAL);
XMC_VADC_GROUP_SetPowerMode(VADC_G1, XMC_VADC_GROUP_POWERMODE_NORMAL);
XMC_VADC_GROUP_SetSyncMaster(VADC_G0);
XMC_VADC_GROUP_SetSyncSlave(VADC_G1, 0, 1);
XMC_VADC_GROUP_CheckSlaveReadiness(VADC_G1, 1);
XMC_VADC_GROUP_CheckSlaveReadiness(VADC_G0, 1);
}
void Get_ADC_A_and_B (unsigned long *A, unsigned long *B)
{
*A = XMC_VADC_GROUP_GetResult(VADC_G0, 0);
*B = XMC_VADC_GROUP_GetResult(VADC_G1, 0);
}
void Get_ADC_C (unsigned short *C)
{
*C = XMC_VADC_GROUP_GetResult(VADC_G0, 2);
}
void Get_ADC_D (unsigned short *D)
{
*D = XMC_VADC_GROUP_GetResult(VADC_G0, 3);
}
void Get_ADC_E (unsigned short *E)
{
*E = XMC_VADC_GROUP_GetResult(VADC_G0, 4);
}
is this the best config for the peripheral or I forgot something?
Thanks,
Xabi
im doing the VADC driver for XMC1300 microcontroller but I got one question. My supply voltage is 3v3 and im using resolution of 12 bit. I need to read 2 signals in parallel and three on demand mode.
- When i read ADC conversion result the scaling is not done correctly. 3.3 volts do not correspond to 0xFFF. What i need to do to solve this? I need to add some reference to the peripheral?
here is my code:
#include <xmc_gpio.h>
#include <xmc_vadc.h>
XMC_VADC_GLOBAL_CONFIG_t g_global_handle;
XMC_VADC_GROUP_CONFIG_t g_group_handle;
XMC_VADC_QUEUE_CONFIG_t g_queue_handle = {
.trigger_signal = XMC_VADC_REQ_TR_I,
.trigger_edge = XMC_VADC_TRIGGER_EDGE_ANY,
.external_trigger = 1, };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch0_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 0,
.sync_conversion = 1, };
XMC_VADC_CHANNEL_CONFIG_t g_g1_ch0_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 0, };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_0_handle = {
.channel_num = 0,
.refill_needed = 1,
.external_trigger = 0 };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch2_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 2 };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_2_handle = {
.channel_num = 2,
.refill_needed = 1,
.external_trigger = 0 };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch3_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 3 };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_3_handle = {
.channel_num = 3,
.refill_needed = 1,
.external_trigger = 0 };
XMC_VADC_CHANNEL_CONFIG_t g_g0_ch4_handle = {
.alias_channel = XMC_VADC_CHANNEL_ALIAS_DISABLED,
.result_reg_number = 4 };
XMC_VADC_QUEUE_ENTRY_t g_queue_entry_4_handle = {
.channel_num = 4,
.refill_needed = 1,
.external_trigger = 0 };
void Init_ADC (void)
{
XMC_VADC_GLOBAL_Init(VADC, &g_global_handle);
XMC_VADC_GROUP_Init(VADC_G0, &g_group_handle);
XMC_VADC_GROUP_Init(VADC_G1, &g_group_handle);
XMC_VADC_GLOBAL_StartupCalibration(VADC);
XMC_VADC_GROUP_QueueInit(VADC_G0, &g_queue_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 0, &g_g0_ch0_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G1, 0, &g_g1_ch0_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 2, &g_g0_ch2_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 3, &g_g0_ch3_handle);
XMC_VADC_GROUP_ChannelInit(VADC_G0, 4, &g_g0_ch4_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_0_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_2_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_3_handle);
XMC_VADC_GROUP_QueueInsertChannel(VADC_G0, g_queue_entry_4_handle);
XMC_VADC_GROUP_SetPowerMode(VADC_G0, XMC_VADC_GROUP_POWERMODE_NORMAL);
XMC_VADC_GROUP_SetPowerMode(VADC_G1, XMC_VADC_GROUP_POWERMODE_NORMAL);
XMC_VADC_GROUP_SetSyncMaster(VADC_G0);
XMC_VADC_GROUP_SetSyncSlave(VADC_G1, 0, 1);
XMC_VADC_GROUP_CheckSlaveReadiness(VADC_G1, 1);
XMC_VADC_GROUP_CheckSlaveReadiness(VADC_G0, 1);
}
void Get_ADC_A_and_B (unsigned long *A, unsigned long *B)
{
*A = XMC_VADC_GROUP_GetResult(VADC_G0, 0);
*B = XMC_VADC_GROUP_GetResult(VADC_G1, 0);
}
void Get_ADC_C (unsigned short *C)
{
*C = XMC_VADC_GROUP_GetResult(VADC_G0, 2);
}
void Get_ADC_D (unsigned short *D)
{
*D = XMC_VADC_GROUP_GetResult(VADC_G0, 3);
}
void Get_ADC_E (unsigned short *E)
{
*E = XMC_VADC_GROUP_GetResult(VADC_G0, 4);
}
is this the best config for the peripheral or I forgot something?
Thanks,
Xabi
↧
DMA does not transfer data
I am trying to use the DMA (GPDMA0) to transfer 150 Bytes of data from a memory buffer to a USIC (USIC1_CH0) set to SPI mode on a XMC4500.
I have configured the USIC for SPI and I can use it to send data using Interrupts.
I have enabled the GPDMA0 and configured channel 3 for single block transfer:
The DLR is also configured:
The USIC is configured to generate a Service Request 1 on a transmit buffer Interrupt:
When I enable the DMA channel the source is read (8 Bytes) and the FIFO is not empty, but no data is written to the USIC. If I Trigger a transmit buffer Interrupt with the Software the first Byte of data is transmitted, but nothing more happens. I can see that the Service request is pending in the NVIC (ExtIRQ 91).
What do I need to do so that the DMA writes the rest of the data to the USIC?
I have configured the USIC for SPI and I can use it to send data using Interrupts.
I have enabled the GPDMA0 and configured channel 3 for single block transfer:
CTLL = 0x00100101
CFGL = 0x000008E0
CFGH = 0x00001804
Source and Destination Registers are correct
CFGL = 0x000008E0
CFGH = 0x00001804
Source and Destination Registers are correct
The DLR is also configured:
SRSEL0 = 0x0000X000
LNEN = 0x00000008
LNEN = 0x00000008
The USIC is configured to generate a Service Request 1 on a transmit buffer Interrupt:
CCR = 0x00002001
INPR = 0x00000010
INPR = 0x00000010
When I enable the DMA channel the source is read (8 Bytes) and the FIFO is not empty, but no data is written to the USIC. If I Trigger a transmit buffer Interrupt with the Software the first Byte of data is transmitted, but nothing more happens. I can see that the Service request is pending in the NVIC (ExtIRQ 91).
What do I need to do so that the DMA writes the rest of the data to the USIC?
↧
↧
On-The-Fly & Synchronized CCU/PWM update for Compare/ Timer-Period
I figured out, this can be achieved by using GCSS - Global Channel Set Register.Attachment 3237
Thanks.
Thanks.
↧
Bluetoothsteuerung Bugreport/Feature-Request
Hi,
when I try to fly the Larix with our Samsung Galaxy Tablet (T805), roll and pitch are switched. This makes for a very "interesting" flying experience.
It would be nice to have some kind of control over how the axes are pointed, so you can adapt it to different devices. For now I'll keep using my Galaxy S4, which works as expected.
Regards,
Michael
when I try to fly the Larix with our Samsung Galaxy Tablet (T805), roll and pitch are switched. This makes for a very "interesting" flying experience.
It would be nice to have some kind of control over how the axes are pointed, so you can adapt it to different devices. For now I'll keep using my Galaxy S4, which works as expected.
Regards,
Michael
↧
Just need quick help!!!
Does this happen because it trying to download the program to the micro-controller?
i do not have the j-link connected to the computer because i dont have one im just trying to make sure my code makes sense in the DAVE CE.
i do not have the j-link connected to the computer because i dont have one im just trying to make sure my code makes sense in the DAVE CE.
↧
XMC1400 triggered multiple analog-to-digital conversion (vadc)
Hi,
I want to start the ADC by a timer. It works just as well. The ADC should then perform 3,5 or 7 conversions. Then an interrupt is to be triggered.
I am currently using ADC_SCAN_APP with 3 channels.
I get the results with the following commands:
val[0] = ADC_MEASUREMENT_ADV_GetResult(&ADC_MEASUREMENT_ADV _Channel_A_handle);
val[1] = ADC_MEASUREMENT_ADV_GetResult(&ADC_MEASUREMENT_ADV _Channel_B_handle);
val[2] = ADC_MEASUREMENT_ADV_GetResult(&ADC_MEASUREMENT_ADV _Channel_C_handle);
Channels A, B and C are all connected to the same analog port.
But how can I increase the number of conversions?
What settings do I have to make in the ADC_QEUE_APP?
Thank you very much!
Norgmis
I want to start the ADC by a timer. It works just as well. The ADC should then perform 3,5 or 7 conversions. Then an interrupt is to be triggered.
I am currently using ADC_SCAN_APP with 3 channels.
I get the results with the following commands:
val[0] = ADC_MEASUREMENT_ADV_GetResult(&ADC_MEASUREMENT_ADV _Channel_A_handle);
val[1] = ADC_MEASUREMENT_ADV_GetResult(&ADC_MEASUREMENT_ADV _Channel_B_handle);
val[2] = ADC_MEASUREMENT_ADV_GetResult(&ADC_MEASUREMENT_ADV _Channel_C_handle);
Channels A, B and C are all connected to the same analog port.
But how can I increase the number of conversions?
What settings do I have to make in the ADC_QEUE_APP?
Thank you very much!
Norgmis
↧
↧
Dave error
Hi,
You have to install the Device Descriptions as mentioned in the pop-up message box. then it will work fine.
You have to install the Device Descriptions as mentioned in the pop-up message box. then it will work fine.
↧
CAN conflict
Hi Deni / Tobias,
Just wondered, any further thoughts on this ?
Maybe, transmit queuing is actually occurring. Certainly, as mentioned, CUR is cycling, 1 to F, then repeat.
So perhaps that's the evidence that transmit queuing is happening.
If so, my question then, would be how should the queue be fed ?
When I have a message to submit to the queue, I don't want to have to sit in a polling loop,
waiting for the hardware to report it is not busy, before I can submit the message. And the
question always, is how long is too long, to wait, before timing out, and declaring failure to submit..
Of course, if the hardware reports busy, I could just defer the submit, until I get an interrupt, telling me the transmit
queue has dropped below some threshold, or is empty, and is not busy, and ready to receive a submission.
But unlike for the UART FIFOs, there's no such interrupt. Only a transmit complete interrupt, for the head of the queue,
on completing serialise out onto the CANbus. And a queue full interrupt.
BTW, just to ask, about the transmit complete interrupt, when does this fire? End of ack delimiter? End of EOF 8-bit field?
End of Interframe 3-bit field ?
Asking, as I'm running queue-less presently, awaiting resolution. And to meet the project performance remit,
I don't want any idle dwell, between frames.
Best regards,
David
Just wondered, any further thoughts on this ?
Maybe, transmit queuing is actually occurring. Certainly, as mentioned, CUR is cycling, 1 to F, then repeat.
So perhaps that's the evidence that transmit queuing is happening.
If so, my question then, would be how should the queue be fed ?
When I have a message to submit to the queue, I don't want to have to sit in a polling loop,
waiting for the hardware to report it is not busy, before I can submit the message. And the
question always, is how long is too long, to wait, before timing out, and declaring failure to submit..
Of course, if the hardware reports busy, I could just defer the submit, until I get an interrupt, telling me the transmit
queue has dropped below some threshold, or is empty, and is not busy, and ready to receive a submission.
But unlike for the UART FIFOs, there's no such interrupt. Only a transmit complete interrupt, for the head of the queue,
on completing serialise out onto the CANbus. And a queue full interrupt.
BTW, just to ask, about the transmit complete interrupt, when does this fire? End of ack delimiter? End of EOF 8-bit field?
End of Interframe 3-bit field ?
Asking, as I'm running queue-less presently, awaiting resolution. And to meet the project performance remit,
I don't want any idle dwell, between frames.
Best regards,
David
↧
Problem by using DAVE3 for XMC4500
can anyone help????
↧