- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
hi i am trying to use timers .
i have seen 1 example project in cypress. i've used that code, but i am unable to get the output. LED is continuously glowing.
please help me.
here is the code
//-------------------------------------------------------------------
// Include Files
//-------------------------------------------------------------------
#include
<m8c.h> // part specific constants and macros
#include
//-------------------------------------------------------------------
// C Interrupt Handlers
//-------------------------------------------------------------------
"PSoCAPI.h" // PSoC API definitions for all User Modules#pragma
interrupt_handler Timer8_1_ISR_C//-----------------------------------------------------------------------------
// FUNCTION NAME: Main
//
// DESCRIPTION:
// Main function. Performs system initialization and loops infinitely.
//
//-----------------------------------------------------------------------------
//
// ARGUMENTS: None
// RETURNS: None.
// SIDE EFFECTS: None.
//
// THEORY of OPERATION or PROCEDURE:
// 1) Start the user modules
// 2) Loop Infinitely
//
//-----------------------------------------------------------------------------
//
void
{
mainc() //Enable the Global Interrupt
M8C_EnableGInt;
//Enable the Timer interrupt and Start the UM
Timer8_1_EnableInt();
Timer8_1_Start();
//infinte loop. Processing done only at Timer_ISR.
}
while (1);//-----------------------------------------------------------------------------
// FUNCTION NAME: Timer8_1_ISR_C
//
// DESCRIPTION:
// Interrupt Service routine of Timer8_1 usermodule written in C.
// The _Timer8_1_ISR subroutine In the Timer8_1INT.asm file,
// redirects the flow to this subroutine.
//-----------------------------------------------------------------------------
//
// ARGUMENTS: None
// RETURNS: None.
// SIDE EFFECTS: None.
//
// THEORY of OPERATION or PROCEDURE:
// A Terminal Count interrupt occurs at an interval of 0.5 secs.
// The state of pin P2[0] is determined and reversed.
//
//
void
{
Timer8_1_ISR_C() //Read Port2 and XOR it with 0x01 to change the status from On to Off and vice-versa.
PRT2DR ^= 0x01;
}
- Labels:
-
PSoC 1
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Vishnu,
It is difficult to find out the problem only with the main.c code. Can you zip the complete project folder and attach it here?
Best Regards,
Ganesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your main.c code also has some problem.
You have declared TIMER8_1_ISR_C as an interrupt handler. But you have not defined the function correctly. This is the correct way of writing the function.
void TIMER8_1_ISR_C(void)
{
PRT2DR ^= 0x01;
}
In the Timer8's ISR file, you should have the below code in the user code marker area.
ljmp _TIMER8_1_ISR_C
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
sir i am attaching the complete zip file.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
sir I am attached the file here
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
sir i am trying to attach the file but i am getting exception.
is there any alternate solution to send the file to u
Thanks & Regards
vishnu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Following changes are required in your project.
1. In your project, this parameter is set to UseSysClkDirect. This will override the VC3 Clock setting and set the clock to 24MHz. Due to this, the interrupt from the timer will be too fast and you will see the LED to be always On. Set this parameter to "SyncToSysClk"
2. I guess you are trying to get a 2Hz interrupt from the Timer. For this, set the VC3 source to VC2.
3. I dont understand the logic you have used in main.c using the count variable. If you set the VC3 source to VC2 and set the SysClk parameter right, the Timer will generate an interrupt every 500mS. So, you can have the "PRT2DR ^= 0x80" instruction inside the ISR
4. You should not add an underscore before the function name when writing it in C. When a C function is called from assembly, an underscore has to be added in the assembly function call.
Make the above corrections in device editor and replace main.c code with below code and you should see the LED blinking at 1Hz (I have tested this)
#pragma interrupt_handler Timer8_1_ISR
void main(void)
{
M8C_EnableGInt;
Timer8_1_EnableInt();
Timer8_1_Start();
while(1)
{
}
}
void Timer8_1_ISR(void)
{
PRT2DR ^= 0x80;
}
Best Regards, Ganesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank u so much sir. i got the result.
Thanks & Regards
Vishnu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You are most welcome!!