Hi All, Presently am working with 56807 EVM using codewarrior, but am programming strictly in C. I collected the following example, which functions such that when a timer is fed with an input via the function generator, the GPIO_B_PIN_7 follows suit. I.E. the rising and the falling edges of the input are seen on the scope when the +ve end of the BNC is connected to GPIO_B_PIN_7 and the -ve end to the GND. INPUT SPECIFICATIONS: square waveform, 1 KHz, 50% DC, (0~2.80v) 1. My problem is that in this Timer values layout "/* AssertWhenForced = */ 0," which BIT does this correspond to in the Timer_CTRL or Timer_SCR. 2. I tried modifying the given SDK code to strict C, but the program refuses to respond correctly. Please find enclosed the SDK code and the strict C code follows that. Can anyone please tell me where I am going wrong, I have been trying to get this to work for quite sometime now but am not able to comprehend as to where the problem lies. Thanks in advance for your patience and help. Regards. Ritu. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SDK CODE: #include "fcntl.h" #include "quadraturetimer.h" static void CallbackOnOverflow1(qt_eCallbackType CallbackType, void* pParam); static void CallbackOnCompare1(qt_eCallbackType CallbackType, void* pParam); static void CallbackOnInputEdge1(qt_eCallbackType CallbackType, void* pParam); const qt_sState quadParam1 = { /* Mode = */ qtGatedCount, /* InputSource = */ qtPrescalerDiv128, /* InputPolarity = */ qtNormal, /* SecondaryInputSource = */ qtSISCounter0Input, /* CountFrequency = */ qtRepeatedly, /* CountLength = */ qtPastCompare, /* CountDirection = */ qtUp, /* OutputMode = */ qtAssertWhileActive, /* OutputPolarity = */ qtNormal, /* OutputDisabled = */ 1, /* Master = */ 0, /* OutputOnMaster = */ 0, /* CoChannelInitialize = */ 0, /* AssertWhenForced = */ 0, /* CaptureMode = */ qtBothEdges, /* CompareValue1 = */ 0xFFFF, /* CompareValue2 = */ 0, /* InitialLoadValue = */ 0, /* CallbackOnCompare = */ { 0, 0 }, /* CallbackOnOverflow = */ { CallbackOnOverflow1, 0 }, /* CallbackOnInputEdge = */ { CallbackOnInputEdge1, 0 } }; static UWord16 PortB; static UWord16 Timer0; static LastCounter = 0; main() { PortB = open(BSP_DEVICE_NAME_GPIO_B, NULL); ioctl(PortB, GPIO_SETAS_GPIO, gpioPin(B,7)); ioctl(PortB, GPIO_SETAS_OUTPUT, gpioPin(B,7)); ioctl(PortB,GPIO_SET,gpioPin(B,7)); #ifdef BSP_DEVICE_NAME_QUAD_TIMER_A_0 Timer0 = open(BSP_DEVICE_NAME_QUAD_TIMER_A_0, 0, &quadParam1 ); #endif while(1) /* executive loop */ { } } void CallbackOnOverflow1(qt_eCallbackType CallbackType, void* pParam) { } void CallbackOnCompare1(qt_eCallbackType CallbackType, void* pParam) { } void CallbackOnInputEdge1(qt_eCallbackType CallbackType, void* pParam) { static UWord16 i = 0,j=0; UWord16 NewCounter = 0; if(i++ == 1) { i = 0; NewCounter = ioctl(Timer0,QT_READ_CAPTURE_REG,NULL); ioctl(PortB,GPIO_SET,gpioPin(B,7)); } else { LastCounter = ioctl(Timer0,QT_READ_CAPTURE_REG,NULL); ioctl(PortB,GPIO_CLEAR,gpioPin(B,7)); } } ********************************************************************** C CODE: /* File: main.c */ #include "stdio.h" #include "dsp807Reg.h" void IntRoutine(void); void follow(void); void gpio_clear(void); void gpio_set(void); static i = 0; static lastcounter = 0; void main (void) { TmrA0_CTRL = 0X7E00; TmrA0_SCR = 0X00C1; TmrA0_CMP1 = 0XFFFF; TmrA0_CMP2 = 0X0000; TmrA0_LOAD = 0X0000; gpio_clear(); while(1) { follow(); }//end of while return; }//end of main /********/ // void follow(void) { static newcounter = 0; asm(nop); i++; if((i%2)==0) { i = 0; newcounter = TmrA0_CAP; gpio_clear(); }//end of if else { lastcounter = TmrA0_CAP; gpio_set(); }//end of else }//end of interrupt void gpio_set(void) { GPIO_B_IAR = 0X0000; GPIO_B_IESR = 0X0000; GPIO_B_IPR = 0X0000; GPIO_B_IPOLR = 0X0000; GPIO_B_IENR = 0X0000; GPIO_B_PER = 0X0000; GPIO_B_PUR = 0X0000; GPIO_B_DDR = 0X00FF;//generate PULSE_HIGH i.e.gpiob7 == 1. GPIO_B_DR = 0X00FF; } void gpio_clear(void) { GPIO_B_IAR = 0X0000; GPIO_B_IESR = 0X0000; GPIO_B_IPR = 0X0000; GPIO_B_IPOLR = 0X0000; GPIO_B_IENR = 0X0000; GPIO_B_PER = 0X0000; GPIO_B_PUR = 0X0000; GPIO_B_DDR = 0X00FF;//generate PULSE_HIGH i.e.gpiob7 == 1. GPIO_B_DR = 0X0000; } void IntRoutine(void) { asm(nop); return; } |
|
Question about SDK programming.
RE: [motoroladsp] Question about SDK programming.
I am curious as to whether or not your code is in fact interrupting and entering both states of the interrupt routine? if it is always executing the first state (i++==0) then it is no doubt the result of the fact that you have placed the "i" variable inside the scope of the interrupt routine, rather than outside as a global variable. I am not sure that the "static" keyword will in fact make the variable retain its value through subsequent entries into the interrupt callback routine( The C Language would seem to indicate that it should be a global variable). Since all uninitialized variables are in fact set to zero, have you tried removing the initialization code? Does the variable in fact still get initialized to zero each time the interrupt routine is entered? Placing it outside (and probably changing the name) would insure that the state would not be initialized to zero every time the routine is entered. In the "strict C" version shouldn't the variable 'i' be incremented in the interrupt routine? Jerry. -----Original Message-----
Hi All, Presently am working with 56807 EVM using codewarrior, but am
I collected the following example, which functions such that
when a
INPUT SPECIFICATIONS: square waveform, 1 KHz, 50% DC, (0~2.80v) 1. My problem is that in this Timer values layout "/*
2. I tried modifying the given SDK code to strict C, but the
program
Please find enclosed the SDK code and the strict C code
follows that.
Thanks in advance for your patience and help. Regards. Ritu. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
static void CallbackOnOverflow1(qt_eCallbackType
CallbackType, void*
const qt_sState quadParam1 = {
/* CountFrequency =
*/ qtRepeatedly,
/* OutputMode =
*/
qtAssertWhileActive,
/* Master =
*/
0,
/* CaptureMode =
*/
qtBothEdges,
/* CompareValue1 =
*/ 0xFFFF,
/* CallbackOnCompare =
*/ { 0, 0 },
static UWord16 PortB;
main()
void CallbackOnOverflow1(qt_eCallbackType CallbackType,
void* pParam)
void CallbackOnCompare1(qt_eCallbackType CallbackType,
void* pParam)
void CallbackOnInputEdge1(qt_eCallbackType CallbackType,
void*
********************************************************************** C CODE: /* File: main.c */ #include "stdio.h"
void IntRoutine(void);
void main (void)
gpio_clear(); while(1)
/********/
void gpio_set(void)
void gpio_clear(void)
void IntRoutine(void)
_____________________________________
_____________________________________
To Join: m...@yahoogroups.com To Post: m...@yahoogroups.com To Leave: m...@yahoogroups.com Archives: http://www.yahoogroups.com/group/motoroladsp More Groups: http://www.dsprelated.com/groups.php3
" TARGET="_blank">http://docs.yahoo.com/info/terms/ ________________________________________________________________________
________________________________________________________________________ This email has been scanned for all viruses by the MessageLabs SkyScan service. For more information visit http://www.messagelabs.com ________________________________________________________________________ |