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:ae7a710b93e5, committed 2010-12-04
- Comitter:
- guruimage
- Date:
- Sat Dec 04 06:53:45 2010 +0000
- Commit message:
- HW3B getTime with Synchronization in Slave
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:53:45 2010 +0000
@@ -0,0 +1,156 @@
+#include "mbed.h"
+
+
+ struct timeval
+{
+ unsigned long long int tv_sec; /* Seconds. */
+ unsigned long long int tv_usec; /* Microseconds. */
+};
+void sync(void);
+void getValue(void);
+void readTime(void);
+void SetupTimer1(void);
+void SetupTimer0(void);
+void Timer1_IRQHandler(void);
+void Timer0_IRQHandler(void);
+unsigned long long int atoi1(char *str);
+void getTime(struct timeval *tv);
+Serial device(p9, p10);
+Serial pc(USBTX, USBRX);
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+char* store=new char;
+int i=0;
+int k=0;
+int timeNum=0;
+unsigned long long int t1=0;
+unsigned long long int t2=0;
+unsigned long long int t3=0;
+unsigned long long int t4=0;
+long long int t11=0;
+long long int t22=0;
+long long int t33=0;
+long long int t44=0;
+long long int offset;
+char buffRx[100];
+int handleTrue = 0;
+
+
+int main() {
+wait(0.001);
+for(int i =0;i<100;i++){
+ buffRx[i]=NULL;
+}
+timeval *currentTime = new timeval;
+
+ SetupTimer1();
+
+ pc.printf("out of the loop!");
+ while(1){
+ wait(1);
+ sync();
+ }
+}
+
+void sync(void){
+ char temp1[40];
+ char temp2[40];
+ int numcount=0;
+
+ t1=(unsigned long long int)(LPC_TIM1->TC+4294967296*timeNum);
+ device.putc('s');// send s to initialize synchronization.
+ device.attach(&getValue);
+ if(handleTrue == 1){
+ myled1=!myled1;
+ handleTrue = 0;
+ k=0;
+ if(buffRx[0] == 'd'){
+ t4=(unsigned long long int)(LPC_TIM1->TC+4294967296*timeNum);
+ myled2=!myled2;
+
+ }
+ for(int i=0; i<40;i++){
+ temp1[i]=NULL;
+ temp2[i]=NULL;
+ }
+ if(buffRx[1] == 'm'){
+ for(int i=2;buffRx[i]!='f';i++){
+ temp1[i-2]=buffRx[i];
+ numcount = i;
+ }
+ t2=atoi1(temp1);
+ for(int i=0; i<40;i++){
+ temp1[i]=NULL;
+ }
+
+ for(int i=numcount+2;buffRx[i]!='n';i++){
+ temp2[i-numcount-2]=buffRx[i];
+ }
+ numcount=0;
+ t3=atoi1(temp2);
+
+ for(int i=0; i<40;i++){
+ temp2[i]=NULL;
+ }
+
+ t11=(long long int)t1;
+ t22=(long long int)t2;
+ t33=(long long int)t3;
+ t44=(long long int)t4;
+ offset = (long long int)(((t22-t11)-(t44-t33))/2);
+ //LPC_TIM1->TC=LPC_TIM1->TC-offset;
+ for(int i=0;buffRx[i]!=NULL;i++){
+ buffRx[i]=NULL;
+ }
+ //pc.printf("\r\nOffset is %llu!\r\n",offset);
+ }
+ }
+ pc.printf("\r\nT1: %llu, T2: %llu, T3: %llu T4: %llu timeNum: %d\r\nOffset is %lld!\r\n",t1,t2,t3,t4, timeNum,offset);
+
+}
+
+void getValue(void){
+ buffRx[k]=device.getc();
+ //pc.printf("%c",buffRx[k]);
+ if(buffRx[k]=='n'){
+ handleTrue = 1;
+ }
+ k++;
+}
+
+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++;
+ LPC_TIM1->IR = 1;
+}
+
+void getTime(struct timeval *tv) {
+ tv->tv_sec=(unsigned long long int)((LPC_TIM1->TC+4294967296*timeNum-offset)/96000000);
+ tv->tv_usec=(unsigned long long int)((LPC_TIM1->TC+4294967296*timeNum-offset)/96000);
+}
+
+
+unsigned long long int atoi1(char *str){
+unsigned long long int result=0;
+for(int i =0;str[i]!=NULL;i++){
+int temp = str[i]-'0';
+result=result*10+temp;
+}
+return result;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Dec 04 06:53:45 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e