Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:d5c7badbe8ad, committed 2010-12-04
- Comitter:
- guruimage
- Date:
- Sat Dec 04 06:55:01 2010 +0000
- Commit message:
- HW3B part2 master
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sat Dec 04 06:55:01 2010 +0000
@@ -0,0 +1,175 @@
+#include "mbed.h"
+ LocalFileSystem local("local");
+void SetupTimer1(void);
+void getTime(struct timeval *tv) ;
+void itoa( unsigned long long int value, char *str);
+void sync(void);
+void Timer1_IRQHandler(void);
+void Timer2_IRQHandler(void);
+void setupTrigger(void);
+void runAtTrigger(void(*trigFunc)(struct timeval *tv));
+//void (*mytrigFunc)(struct timeval *tv);
+void trigFunc(struct timeval *tv);
+void pinToggle(void);
+void reportToggle(unsigned long long int time);
+DigitalOut toggle(p18);
+
+Serial device(p9,p10);
+Serial command(p13,p14);
+Serial pc(USBTX, USBRX); // tx, rx
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+int timeNum = 0;
+unsigned long long int t2=0;
+unsigned long long int t3=0;
+int secCom = 0;
+int usecCom = 0;
+int usecT1=0;
+int usecT4=0;
+long long int tc;
+int x=0;
+char buffTx2[40];
+char buffTx1[40];
+struct timeval
+{
+ unsigned long long int tv_sec; /* Seconds. */
+ unsigned long long int tv_usec; /* Microseconds. */
+};
+timeval globalTime;
+
+
+int main() {
+wait(0.001);
+for(int i =0;i<40;i++){
+ buffTx1[i]=NULL;
+ buffTx2[i]=NULL;
+ }
+ SetupTimer1();
+ setupTrigger();
+ device.attach(&sync,Serial::RxIrq);
+
+ for(int j=0;j<4;j++){
+ command.putc('8');
+ }
+}
+
+void sync(void){
+
+ if(device.getc()=='s'){
+ t2=(unsigned long long int) (LPC_TIM1->TC+4294967296*timeNum);
+
+
+
+ device.putc('d');
+ t3=(unsigned long long int) (LPC_TIM1->TC+4294967296*timeNum);
+ device.putc('m');
+ itoa(t2,buffTx1);
+ pc.printf("\r\nt2 %ul\r\n",t2);
+
+ for(int i = 0; (buffTx1[i]!=NULL);i++){
+ device.putc(buffTx1[i]);
+ myled1=!myled1;
+ pc.printf("%c",buffTx1[i]);
+
+ }
+ device.putc('f');
+ itoa(t3,buffTx2);
+ pc.printf("\r\nt3 %ul timeNum %u\r\n",t3,timeNum);
+
+ for(int i = 0; (buffTx2[i]!=NULL);i++){
+ device.putc(buffTx2[i]);
+ myled2=!myled2;
+ pc.printf("%c",buffTx2[i]);
+
+
+ }
+ device.putc('n');
+ myled4=!myled4;
+
+ }
+
+}
+
+void SetupTimer1(void)
+{
+ LPC_SC->PCONP |= 1 << 2; // Power on Timer`
+ LPC_SC->PCLKSEL0 |= 1 << 4;
+ LPC_TIM1->TCR = 0x2; // Reset and set to timer mode
+ LPC_TIM1->CTCR = 0x0;
+ LPC_TIM1->PR = 0; // No prescale
+ LPC_TIM1->MR0 = 0xFFFFFFFF; // Match count for 100mS
+ LPC_TIM1->MCR = 3; // Interrupt and Reset on Match
+ LPC_TIM1->TCR = 1; // Enable Timer
+
+ // Enable the ISR vector
+ NVIC_SetVector (TIMER1_IRQn, (uint32_t)&Timer1_IRQHandler);
+ NVIC_EnableIRQ(TIMER1_IRQn);
+}
+void Timer1_IRQHandler(void)
+{
+ timeNum++;
+ SetupTimer1();
+ LPC_TIM1->IR = 1;
+}
+
+void getTime(struct timeval *tv) {
+ tv->tv_sec=(unsigned long long)((LPC_TIM1->TC+4294967296*timeNum)/96000000);
+ tv->tv_usec=(unsigned long long)((LPC_TIM1->TC+4294967296*timeNum)/96000);
+}
+void setupTrigger(void){
+LPC_SC->PCONP |= 1 << 22; //power on timer 2;
+LPC_PINCON->PINSEL0 |= 0x00000300;//use capture cap2.0 (pin 30)
+LPC_PINCON->PINMODE0 |=0x00000100;//set pin mode of pin30(p0.04) as repeter
+LPC_TIM2->TCR = 0x2; // Reset and set to timer mode
+LPC_TIM2->CTCR = 0x00000003; //increment TC on rising and falling edge
+LPC_TIM2->CCR = 0x00000007; //trigger interrupt on rising and falling edge
+LPC_TIM2->TCR = 1; // Enable Timer
+
+ // Enable the ISR vector
+ NVIC_SetVector (TIMER2_IRQn, (uint32_t)&Timer2_IRQHandler);
+ NVIC_EnableIRQ(TIMER2_IRQn);
+ }
+void Timer2_IRQHandler(void)
+{
+ //myled2=!myled2;
+ LPC_TIM2->IR = 63;
+ runAtTrigger(trigFunc);
+}
+void runAtTrigger(void (*trigFunc) (struct timeval *tv)){
+
+ (*trigFunc)(&globalTime);
+}
+void trigFunc(struct timeval *tv){
+ getTime(tv);
+ myled3=!myled3;
+ reportToggle(tv->tv_usec);
+ printf("time is %llu!\r\n",tv->tv_usec);
+
+}
+
+void itoa( unsigned long long int value, char *str)
+{
+ int i,j;
+ char temp[30];
+ for(i=0; value > 0; i++){
+ str[i] = value%10+'0';
+ value=value/10;
+ }
+ for(j=0;i>=0;j++,i--){
+ temp[j]=str[i-1];
+ }
+ for(i=0;i<j;i++){
+ str[i]=temp[i];
+ }
+}
+void pinToggle(void){
+ toggle=!toggle;
+}
+
+void reportToggle(unsigned long long int time){
+ FILE *fp = fopen("/local/reportToggle.txt", "w");
+ fprintf(fp,"%llu\r\n", time);
+ fclose(fp);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Dec 04 06:55:01 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e