Hello,
I am writing an I2C master transmitter object. The problem I am having is that the IRQ Handler for I2C1 is not firing. According to the manual, it should fire after the start condition is sent and the status register is 0x08. When I step through the code with the debugger, the status code is 0x08. I am using an MCB1700 development board. Why is it not firing? Did I not configure something properly? For tests, All I am doing is toggling an LED on when the interrupt fires. Once I solve this problem, I will write the rest of the code.
#include <stdio.h> #include <LPC17XX.h> #include "GPIO1Output.h" GPIO1Output out(P1_28); __irq void I2C1_IRQHandler(void) { if (LPC_I2C1->I2STAT == 0x08) { out.Set(); } } int main(void) { // Initialize I2C. LPC_PINCON->PINSEL0 = 0x0F; LPC_PINCON->PINMODE_OD0 = 0x03; NVIC_EnableIRQ(I2C1_IRQn); LPC_I2C1->I2CONSET = 0x40; LPC_I2C1->I2CONSET = 0x20; int status = LPC_I2C1->I2STAT; }
Funny that you ask, do other interrupts work. The answer is no. Other ones do not work either. At the link is a picture of my startup files. Are they not standard?
imageshack.us/.../
Take the startup files of a working Keil example for the MCB1700. Overwrite yours. What happens?
The interrupts work when I overwrite one of Keil's examples. When I started the project, a wizard ran in Keil that placed the startup_LPC17xx.h file. I manually placed the startup_LPC17xx.c from the startup directory otherwise I would not be able to call anything. Is there anything I should have done differently here?
I met to say the wizard placed the startup_LPC17xx.s file, not the the startup_LPC17xx.h file.
Don't waste your time. Run a diff between the projects and correct in your own sources.
The projects contain older versions of the files. Merging them with mine will cause other problems. Is there a document that says how to properly create a project so that everything will function properly?
Here is the project. I do not wish to rely on other projects just to allow interrupts to work. That startup file does contain definitions for all the IRQ service routines but they somehow are not linking. My entire project is available for download here:
www.filedropper.com/firmware
So how can you properly configure this simple project?
OK, here is the lowndown:
The most recent version of the files do not work! The core_cm3.c file version 1.20, the LPC17xx.c 1.10, the system_LPC17xx.c 1.01, and the startup_LPC17xx.s 1.0 are the combination of the files that work. There is either something very wrong with the new files or I am missing something.
Should I use the old files or do any of you know how to make the new ones work?
You could compare them against the "new" files - and spot the differences.
http://winmerge.org/
You could step through with the "old" files to see what happens when it is working, then do the same with the "new" files - and see where it stops...
There are differences, more in some of the files than the others. I could not find based upon these differences what was causing the malfunction.
Also, stepping through the files does not work as the debugger just stops and does not specify where it stopped at. What now?
Any chance you'll be posting your diff report here, caring to do so using the proper format specifiers?
What do you mean by diff report?
Any diff tool out there ,including Winmerge, can save the result to a file.
"Diff" here is short for "Difference" - ie, the report of the differences between the files.
Here is the report for each file:
www.filedropper.com/differencereport
When I debug with the latest files, the debugger hangs and the t1: field keeps increasing. When I click the stop button, the yellow arrow appears pn the line with a B assembly statement (see screenshot). Does this say anything?