This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

XC167 CAPCOM6 for simple PWM

Hi all,
I am trying to use CC60 and COUT60 on the XC167 for simple PWM generation, not for anything fancy like motor control. I am debugging using the HiTop and Tantino. My problem is that I can see T12 running, and can see CC60ST toggling in E8A8. However, the port pins P1L_P0 and P1L_P1 remain low.
I have disabled the EBC (EBCMOD0 = 0x7400 & EBCMOD1 = 0x00FF. The port pins are set to output, and I have tried setting the alt function to 0 and 1 (due to conflicting instructions depending on which docs you read), but still no output. I'm sure it must be something simple given that I am generating the CC60ST signal, this only has to go through the modulation part (that I am not using) and to the output pin. I have also checked the output pin by toggling it as a general I/O in my task scheduler, that works fine.

Here is a snippet of my config code if it helps:

Hoping someone has the answer - Cheers,


void Initialise_PWM_CAPCOMs( void )
{
Union_16_bit_value r_16;
/* Set the PWM channels and output ports */
/* Set up PWM for 83.333KHz for temporarily driving the VT generation by connecting
this PWM output to T5IN. */
CCU6_CC60SR = TIMER12_50PERCENT_DUTY;/* Set the shadow register and this will get
transferred to the main register automatically */


/*CCU6_PSLR structure...
unsigned int PSL_CC60 :1;
unsigned int PSL_COUT60 :1;
unsigned int PSL_CC61 :1;
unsigned int PSL_COUT61 :1;
unsigned int PSL_CC62 :1;
unsigned int PSL_COUT62 :1;
unsigned int pad0 :1;
unsigned int PSL63 :1;
unsigned int pad1 :8;*/
r_16.value = CLEAR_ALL_FIELDS;
CCU6_PSLR = r_16.value;


/* Set the timers (T12) to drive the PWM channels */
/* structure for CCU6_T12DTC....
unsigned int DTM :6;
unsigned int pad0 :2;
unsigned int DTE0 :1;
unsigned int DTE1 :1;
unsigned int DTE2 :1;
unsigned int pad1 :1;
unsigned int DTR0 :1;
unsigned int DTR1 :1;
unsigned int DTR2 :1;
unsigned int pad2 :1;*/
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_t12dtc.DTM = 1;/* Dead time has to be a min of 1 even if not used */
CCU6_T12DTC = r_16.value;


/* CCU6_MODCTR structure
unsigned int CC60_T12MODEN :1;
unsigned int COUT60_T12MODEN :1;
unsigned int CC61_T12MODEN :1;
unsigned int COUT61_T12MODEN :1;
unsigned int CC62_T12MODEN :1;
unsigned int COUT62_T12MODEN :1;
unsigned int pad0 :1;
unsigned int MCMEN :1;
unsigned int CC60_T13MODEN :1;
unsigned int COUT60_T13MODEN :1;
unsigned int CC61_T13MODEN :1;
unsigned int COUT61_T13MODEN :1;
unsigned int CC62_T13MODEN :1;
unsigned int COUT62_T13MODEN :1;
unsigned int pad1 :1;
unsigned int ECT13O :1;*/
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_modctr.CC60_T12MODEN = 1;
r_16.ccu6_modctr.COUT60_T12MODEN = 1;
CCU6_MODCTR = r_16.value;


/*ccu6_t12msel structure...
unsigned int MSEL60 :4;
unsigned int MSEL61 :4;
unsigned int MSEL62 :4;
unsigned int HSYNC :3;
unsigned int DBYP :1;*/
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_t12msel.MSEL60 = 3;/*Compare output on pins CC60 and COUT60*/
CCU6_T12MSEL = r_16.value;

/* Set up timer12 for PWMs*/
CCU6_T12PR = TIMER12_PERIOD;/*timer 12 Period Register. Actual period = value+1*/


/* Set up timer13 */
CCU6_T13PR = 0x0001;/*timer 13 must have a value of 1 or greater even though
it is not in use at the moment*/

/*CCU6_TCTR0 structure...
unsigned int T12CLK :3;
unsigned int T12PRE :1;
unsigned int T12R :1;
unsigned int STE12 :1;
unsigned int CDIR :1;
unsigned int CTM :1;
unsigned int T13CLK :3;
unsigned int T13PRE :1;
unsigned int T13R :1;
unsigned int STE13 :1;
unsigned int pad0 :1;
unsigned int pad1 :1;*/
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_tctr0.T12CLK = 2;/* divide the clock (40MHz by 4). */
CCU6_TCTR0 = r_16.value;


/* CCU6_TCTR2 structure....
unsigned int T12SSC :1;
unsigned int T13SSC :1;
unsigned int T13TEC :3;
unsigned int T13TED :2;
unsigned int pad0 :9;*/
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_tctr2.T13TED = 1;/* Must be at least 1 even if not used */
CCU6_TCTR2 = r_16.value;


/* Now set the shadow transfer of TCTR4 before setting the run bit */
/*ccu6_tctr4 structure...
unsigned int T12RR :1;
unsigned int T12RS :1;
unsigned int T12RES :1;
unsigned int DTRES :1;
unsigned int pad0 :2;
unsigned int T12STR :1;
unsigned int T12STD :1;
unsigned int T13RR :1;
unsigned int T13RS :1;
unsigned int T13RES :1;
unsigned int pad1 :3;
unsigned int T13STR :1;
unsigned int T13STD :1;*/
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_tctr4.T12STR = 1;
CCU6_TCTR4 = r_16.value;

/* Now set timer 12 into run mode */
r_16.value = CLEAR_ALL_FIELDS;
r_16.ccu6_tctr4.T12STR = 1;/* Leave this bit set */
r_16.ccu6_tctr4.T12RS = 1;
CCU6_TCTR4 = r_16.value;

0