the new home for XMC1000

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
chipper
Employee
Employee
Hi community
since we just launched our brand new XMC1000 family at the embedded world in Nürnberg we would like to offer this new forum to support you in discovering the features of our ARM® Cortex™-M0 microcontrollers.

thanks for your ongoing support
-chipper-
0 Likes
12 Replies
Not applicable
It is help to let customer engineer to know more XMC1000 place ^^
0 Likes
Arno
Employee
Employee
25 replies posted 10 replies posted 5 replies posted
Infineon home page XMC1000:
http://www.infineon.com/XMC1000
Scroll down and click to 'Documents' for reference manuals, data sheets, etc.

Development kits for XMC1000 can be found here.
Web-shop for the development kits is available as well. Have a look at eHitex web-shop.
0 Likes
Not applicable
Hello to all users.

From what I read it appears possible to port the mbed online compiler platform to the XMC development kits.:)
http://mbed.org/handbook/mbed-SDK-porting
The only issue is that the interface microcontroller the 4200 needs to be updated as a mass storage device.
Does anybody worked with the XMC4200 usb stack before?

Thank you.

LE: This could be a great opportunity for Infineon to make their products available also for students and hobbyists.
0 Likes
Not applicable
Hello everybody,

I have just started with the XMC1100 board and DAVE and try to find my way through it. I am a little struggling with the complexity of the USIC. I have installed the UART002 app. Does anybody have a code example for UART communication (e.g. 51200 Baud, no parity, one stopbit) to get started?

thanks in advance,
0 Likes
Not applicable
smktec ,

Are you using RTOS? Why are you using UART002 App?
If you are not using RTOS, you should use UART001 App.
All you need to do is configure your UART requirement on the UI and then generate the code.

rgds,
Rou
0 Likes
Not applicable
Rou wrote:
smktec ,

Are you using RTOS? Why are you using UART002 App?
If you are not using RTOS, you should use UART001 App.
All you need to do is configure your UART requirement on the UI and then generate the code.

rgds,
Rou


Thanks for your advice. It works well. I guess I am gradually getting on board understanding how to work with DAVE.
0 Likes
Not applicable
Hi everybody,

I established UART communiction between PC and XMC1100 using UART001/0 by calling UART001_ReadData(UART001_Handle0) in the Main Programm successfully. However, I could not receive the data using the interrupt app NVIC001/0.
Settings: NVIC001/0: Interrupt Enable at Initialization: checked
Premption Priority: 3
User defined event handler 1: UARTInterrupt
Manual Resource Assignment: nvicnode: /cpu/0/nvic/interrupt/24
UART001: 8Bit, 1 stopbit, no parity(also tried with even parity), 52100 Baud

Code:
#include //Declarations from DAVE3 Code Generation (includes SFR declaration)
void UARTInterrupt(void)
{
//the program never arrived here, having set a breakpoint
uint8_t a,b,c,d;
a=UART001_ReadData(UART001_Handle0);
b=UART001_ReadData(UART001_Handle0);
c=UART001_ReadData(UART001_Handle0);
d=UART001_ReadData(UART001_Handle0);
};

int main(void)
{
uint8_t NodeID;
DAVE_Init(); // Initialization of DAVE Apps
// Get the mapped interrupt ID
NodeID = NVIC001_GetInterruptID(&NVIC001_Handle0);
//the following code receives data
uint8_t a,b,c,d;
a=UART001_ReadData(UART001_Handle0);
b=UART001_ReadData(UART001_Handle0);
c=UART001_ReadData(UART001_Handle0);
d=UART001_ReadData(UART001_Handle0);
while(1)
{
}
return 0;
}

Has anybody an idea, how to get it to work?

thanks,
0 Likes
Not applicable
Hi,

I could find the problem. Manual Resource Assignment needs to be set to : /cpu/0/nvic/interrupt/9.

However, if I send more than one byte at a time the Interrupt routine will be entered twice. The data is received in the correct sequence.
I have tried NVIC_ClearPendingIRQ, but it didn't help.
I want to transmit up to 10 bytes within one frame.
Has anybody an idea?
0 Likes
Not applicable
smktec wrote:
Hi,

I could find the problem. Manual Resource Assignment needs to be set to : /cpu/0/nvic/interrupt/9.

However, if I send more than one byte at a time the Interrupt routine will be entered twice. The data is received in the correct sequence.
I have tried NVIC_ClearPendingIRQ, but it didn't help.
I want to transmit up to 10 bytes within one frame.
Has anybody an idea?


Hi smktec,

Which interrupt are u referring? Is it Standard Received Interrupt?
Since you are sending 2 bytes (I assume you send twice and each is 1 byte), then you should receive 2 interrupt. This is the correct behavior.
Perhaps you can tell me what are the behavior you are expecting?
0 Likes
Not applicable
Jackson wrote:
Hi smktec,

Which interrupt are u referring? Is it Standard Received Interrupt?
Since you are sending 2 bytes (I assume you send twice and each is 1 byte), then you should receive 2 interrupt. This is the correct behavior.
Perhaps you can tell me what are the behavior you are expecting?


thanks for your note,

meanwhile I could get the desired result after going through all register over and over again learning their function. Chapter 14.2.8.2 of the reference manual was a good guide.

But could you tell me which is the source of fPB which goes into the Baud Rate Generator. Is it MCLK, PCLK coming from the SCU or is it even another source? I could not find a clear explanation in the XMC1100 reference manual.

thanks,
0 Likes
Not applicable
Hi to all,
I have try to use dmx app in any way before and after migration. there is not way to play with that on my 1200 demo board with rgb and white kit
I'm really new on Dave and its language so I share with you my ISR on Dallas 8 bit micro to read perfectly from 1 to 512 channels from any kind of tx (tested also with Lighting consolle ... my previus job)
I hope some of you can design a new Dave project with that and post it to use dmx to control rgb led demo board via BCCU
I have all the facility from the DMX side also with RDM (Remote Device Managment) to test.
'crystall 8Mhz
$regfile = "87c520.dat"

'***ISR***
On Serial1 Rec_byte Nosave

'***IE ENABLE***
setb Ie.7 'enable global IE
setb ie.4 'enable serial 0 interrupt

'IE PRIORITY
'setb ip.4'serial0 high

setb Scon.4 'enable serial 0

'***SERIAL1 SETTINGS FOR DMX 512***
setb Wdcon.7 'double clock for serial 1 baud rate
setb Scon1.7 'set serial1 mode 2

'***ISR***
Rec_byte:
$asm
push psw
push acc
push r0
push r1
clr scon1.0
jb scon1.2,rec 'se scon2 è settato non è un breake, si salta a REC per ricevere i dati dmx THIS IS TO VERIFY THE BREAK (bit number 9 )
mov {cur_byte+0},#00h 'è stato ricevuto il breake, si resettano i contatori cur_byte e iaddress BREAK IS RECEIVED SO RESET AL PARAMETER
mov {cur_byte+1},#00h
mov {iaddress+0},{dmx_c+0} IADDRESS IS THE FIRST CHANNEL IN THE FRAME WE NEED TO RETRIVE
mov {iaddress+1},{dmx_c+1} DMX_C IS A COUNTER TO FEEL THE ARRAY
mov {s},#&h09 'conto alla rovescia per i 9 ch del videoproiettore &h09 ARE THE CHANNELLS WILL BE READ IN THE FRAME. S IS THE NUMBER OF CHANNELS TO READ
mov {pp},#&h5c 'sposta p alla locazione di dmx_n(1) ADDRESS LOCATION FOR THE FIRST OF 9 CHANNELS READ VALUE IN THE ARRAY DMX_N(N)
pop r1
Pop r0
Pop Acc
pop psw
reti
Rec:
mov a,{s}
cjne a,#00h,f 'se i canali sono tutti letti si esce dall'interrupt IF ALL 9 CHANNELS ARE READ RETURN FROM INT
pop r1
Pop r0
Pop Acc
pop psw
reti
F:
Mov a ,{cur_byte+1} '
cjne a,#00h,recd1 'se cur_byte è 0 testiamo se sbuf è startbyte cioè 0, altrimnti si va a recd THIS TEST IF START BYTE =0
Mov a ,{cur_byte+0} '
cjne a,#00h,recd1 '
mov a,sbuf1
cjne a,#00h,outi 'se è lo startbyte... IF THIS IS NOT THE START BYTE JUMP TO OUTI
Inc {cur_byte} 'incrementiamo cur_byte per ricevere il primo indirizzo dal dmx INC cur_byte TO WAIT MY FIRST CHANNEL TO READ
pop r1
Pop r0
Pop Acc
pop psw
reti
Recd1:
Mov a,{cur_byte+1} 'controllo se è il primo indirizzo che desidero catturare TEST IF THIS IS THE FIRST CHANNEL I NEED TO READ
cjne a,{iaddress+1},not_a
Mov a,{cur_byte+0}
cjne a,{iaddress+0},not_a
mov a,Sbuf1 IF YES I MOVE SERIAL BUFFER ON THE ADDRESS OF ARRAY (PP)
mov r0,{pp}
mov @r0,a
mov a,{iaddress+0}' Get Low Byte :
add a,#1 ' Add 1 :
mov {iaddress+0},a ' Store Back :incrementa iaddress
mov a,{iaddress+1}' Get High Byte :
addc a,#0 ' Add CY, If Set :
mov {iaddress+1},a ' Store Back :
dec {s} ONE CHANNEL LESS TO READ
inc {pp} NEXT NUMBER OF ARRAY ADDRESS TO FEEL
Not_a:
Mov a,{cur_byte+0}' Get Low Byte :
add a,#1 ' Add 1 :
mov {cur_byte+0},a ' Store Back :incrementa cur_byte INC CUR_BYTE TO CHECK NEXT TIME IF THE CHANNELL IS THE CHANNELL I'M WAIT
Mov a,{cur_byte+1}' Get High Byte :
addc a,#0 ' Add CY, If Set :
mov {cur_byte+1},a ' Store Back :
Outi:
pop r1
Pop r0
Pop Acc
pop psw
reti
$end Asm

this service routin I hope will be use full to have a working APP for Dave
Gino
0 Likes
Not applicable
Hi to all,
I have try to use dmx app in any way before and after migration. there is not way to play with that on my 1200 demo board with rgb and white kit
I'm really new on Dave and its language so I share with you my ISR on Dallas 8 bit micro to read perfectly from 1 to 512 channels from any kind of tx (tested also with Lighting consolle ... my previus job)
I hope some of you can design a new Dave project with that and post it to use dmx to control rgb led demo board via BCCU
I have all the facility from the DMX side also with RDM (Remote Device Managment) to test.
'crystall 8Mhz
$regfile = "87c520.dat"

'***ISR***
On Serial1 Rec_byte Nosave

'***IE ENABLE***
setb Ie.7 'enable global IE
setb ie.4 'enable serial 0 interrupt

'IE PRIORITY
'setb ip.4'serial0 high

setb Scon.4 'enable serial 0

'***SERIAL1 SETTINGS FOR DMX 512***
setb Wdcon.7 'double clock for serial 1 baud rate
setb Scon1.7 'set serial1 mode 2

'***ISR***
Rec_byte:
$asm
push psw
push acc
push r0
push r1
clr scon1.0
jb scon1.2,rec 'se scon2 è settato non è un breake, si salta a REC per ricevere i dati dmx THIS IS TO VERIFY THE BREAK (bit number 9 )
mov {cur_byte+0},#00h 'è stato ricevuto il breake, si resettano i contatori cur_byte e iaddress BREAK IS RECEIVED SO RESET AL PARAMETER
mov {cur_byte+1},#00h
mov {iaddress+0},{dmx_c+0} IADDRESS IS THE FIRST CHANNEL IN THE FRAME WE NEED TO RETRIVE
mov {iaddress+1},{dmx_c+1} DMX_C IS A COUNTER TO FEEL THE ARRAY
mov {s},#&h09 'conto alla rovescia per i 9 ch del videoproiettore &h09 ARE THE CHANNELLS WILL BE READ IN THE FRAME. S IS THE NUMBER OF CHANNELS TO READ
mov {pp},#&h5c 'sposta p alla locazione di dmx_n(1) ADDRESS LOCATION FOR THE FIRST OF 9 CHANNELS READ VALUE IN THE ARRAY DMX_N(N)
pop r1
Pop r0
Pop Acc
pop psw
reti
Rec:
mov a,{s}
cjne a,#00h,f 'se i canali sono tutti letti si esce dall'interrupt IF ALL 9 CHANNELS ARE READ RETURN FROM INT
pop r1
Pop r0
Pop Acc
pop psw
reti
F:
Mov a ,{cur_byte+1} '
cjne a,#00h,recd1 'se cur_byte è 0 testiamo se sbuf è startbyte cioè 0, altrimnti si va a recd THIS TEST IF START BYTE =0
Mov a ,{cur_byte+0} '
cjne a,#00h,recd1 '
mov a,sbuf1
cjne a,#00h,outi 'se è lo startbyte... IF THIS IS NOT THE START BYTE JUMP TO OUTI
Inc {cur_byte} 'incrementiamo cur_byte per ricevere il primo indirizzo dal dmx INC cur_byte TO WAIT MY FIRST CHANNEL TO READ
pop r1
Pop r0
Pop Acc
pop psw
reti
Recd1:
Mov a,{cur_byte+1} 'controllo se è il primo indirizzo che desidero catturare TEST IF THIS IS THE FIRST CHANNEL I NEED TO READ
cjne a,{iaddress+1},not_a
Mov a,{cur_byte+0}
cjne a,{iaddress+0},not_a
mov a,Sbuf1 IF YES I MOVE SERIAL BUFFER ON THE ADDRESS OF ARRAY (PP)
mov r0,{pp}
mov @r0,a
mov a,{iaddress+0}' Get Low Byte :
add a,#1 ' Add 1 :
mov {iaddress+0},a ' Store Back :incrementa iaddress
mov a,{iaddress+1}' Get High Byte :
addc a,#0 ' Add CY, If Set :
mov {iaddress+1},a ' Store Back :
dec {s} ONE CHANNEL LESS TO READ
inc {pp} NEXT NUMBER OF ARRAY ADDRESS TO FEEL
Not_a:
Mov a,{cur_byte+0}' Get Low Byte :
add a,#1 ' Add 1 :
mov {cur_byte+0},a ' Store Back :incrementa cur_byte INC CUR_BYTE TO CHECK NEXT TIME IF THE CHANNELL IS THE CHANNELL I'M WAIT
Mov a,{cur_byte+1}' Get High Byte :
addc a,#0 ' Add CY, If Set :
mov {cur_byte+1},a ' Store Back :
Outi:
pop r1
Pop r0
Pop Acc
pop psw
reti
$end Asm

this service routin I hope will be use full to have a working APP for Dave
Gino
0 Likes