PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC32 - Bộ điều khiển tín hiệu số 32-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC32 - Bộ điều khiển tín hiệu số 32-bit Microchip công bố sản phẩm vi xử lý 32-bit ngày 06/11/2007

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 21-08-2009, 10:53 AM   #3
ngocthanh07
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 44
:
Hôm nay em mới có dịp quay lại bài này.

Hôm qua em lôi cái mạch Pic32 Starter Kit ra thử có vài thắc mắc,
Đoạn code mà em thử như sau (copy từ trên microchip forum và vài chỗ khác)
Em dùng MPLAB 8.36, C32 V1.05 , Optimize level -O3
Code:
#include <p32xxxx.h>
#include <plib.h>

#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config POSCMOD = HS, FNOSC = PRIPLL
#pragma config FPBDIV = DIV_1
#pragma config FCKSM = CSECMD
#pragma config IESO = ON
#pragma config FWDTEN = OFF

int t,t1,t2;
extern unsigned int __attribute__((section(".math_errhandling")))math_errhandling;

int main(void)
{ 
   SYSTEMConfigPerformance(40000000) ;
   mCheConfigure(CHE_CONF_WS2       |
                 CHE_CONF_PF_ALL    |
                 CHE_CONF_DC_NONE   |
                 CHE_CONF_COH_INVUNL
                 );
   CheKseg0CacheOn();
   mBMXDisableDRMWaitState();
   //math_errhandling = 0;

// init 32-bit timer4/5
OpenTimer45(T4_ON | T4_SOURCE_INT, 0);
PR5 = 0xFFFFFFFF;
PR4 = 0xFFFFFFFF;

// clear the 32-bit timer count
WriteTimer45(0);

	int InitTime =  ReadTimer45();
  /* initialize constants */

  t   =   0.499975;
  t1  =   0.50025;
  t2  =   2.0;

	int ResultTime = ReadTimer45();
    int Cal_Time   = ResultTime - InitTime;
	return ResultTime;
   
}
Sử dụng PIC32 Starterkit làm debugger và quan sát TMR4 - TMR5, em đặt brakpoints tại hàng
Code:
 int InitTime =  ReadTimer45();
và sau đó chạy step over từng lệnh
Kết quả quang sát các giá trị như sau
Code:
				                 TMR4		TMR5

int InitTime =  ReadTimer45(); 	0x00F2_8C66	0x0000_0103
t   =   0.499975;			        0x9D22_9090	0x0000_9D33
 t1  =   0.50025;			        0xB9B7_16B0	0x0000_B9C8
t2  =   2.0;				        0x70C8_18CD	0x0000_70D9
int ResultTime = ReadTimer45();  0xE9C2_AD21	0x0000_E9D2
return ResultTime;			0X2A20_E3F6	0x0000_2A31

InitTime			0x9C41_0455
ResultTime		        0x2939_162D
Nếu như theo kết quả này thì thời gian thực hiện từng lệnh là quá lâu,
chỉ thực hiện 3 lệnh gán mà có vẽ như Timer45 (32 bit) đã tăng từ 0x9C41_0455 đến 0xFFFF_FFFF để tràn rồi đếm tiếp đến 0x2939_162D, sơ sỡ đã thấy nhiều hơn 0X6000_0000 chu kì, con số này lớn lắm, khoảng 1.5 tỉ lận !!!!

Có cái gì đó không hợp lí, mong các bạn và anh Nam chỉ giúp
Mình up kèm mấy cái hình khi chạy
Còn dưới đây là file De-ASM của đoạn code mình thử
Code:
27:                  OpenTimer45(T4_ON | T4_SOURCE_INT, 0);
9D0004D8  3C02BF80   lui         v0,0xbf80
9D0004DC  AC400C10   sw          zero,3088(v0)
9D0004E0  3C02BF80   lui         v0,0xbf80
9D0004E4  AC400C10   sw          zero,3088(v0)
9D0004E8  3C02BF80   lui         v0,0xbf80
9D0004EC  AC400C20   sw          zero,3104(v0)
9D0004F0  3C03BF80   lui         v1,0xbf80
9D0004F4  34028008   ori         v0,zero,0x8008
9D0004F8  AC620C00   sw          v0,3072(v1)
28:                  PR5 = 0xFFFFFFFF;
9D0004FC  3C03BF80   lui         v1,0xbf80
9D000500  2402FFFF   addiu       v0,zero,-1
9D000504  AC620E20   sw          v0,3616(v1)
29:                  PR4 = 0xFFFFFFFF;
9D000508  3C03BF80   lui         v1,0xbf80
9D00050C  2402FFFF   addiu       v0,zero,-1
9D000510  AC620C20   sw          v0,3104(v1)
30:                  
31:                  // clear the 32-bit timer count
32:                  WriteTimer45(0);
9D000514  3C02BF80   lui         v0,0xbf80
9D000518  AC400C10   sw          zero,3088(v0)
33:                  
34:                  	int InitTime =  ReadTimer45();
9D00051C  3C02BF80   lui         v0,0xbf80
9D000520  8C420C10   lw          v0,3088(v0)
9D000524  AFC2005C   sw          v0,92(s8)
35:                    /* initialize constants */
36:                  
37:                    t   =   0.499975;
9D000528  AF80800C   sw          zero,-32756(gp)
38:                    t1  =   0.50025;
9D00052C  AF808014   sw          zero,-32748(gp)
39:                    t2  =   2.0;
9D000530  24020002   addiu       v0,zero,2
9D000534  AF828010   sw          v0,-32752(gp)
40:                  
41:                  	int ResultTime = ReadTimer45();
9D000538  3C02BF80   lui         v0,0xbf80
9D00053C  8C420C10   lw          v0,3088(v0)
9D000540  AFC20058   sw          v0,88(s8)
42:                      int Cal_Time   = ResultTime - InitTime;
9D000544  8FC30058   lw          v1,88(s8)
9D000548  8FC2005C   lw          v0,92(s8)
9D00054C  00621023   subu        v0,v1,v0
9D000550  AFC20054   sw          v0,84(s8)
43:                  	return ResultTime;
9D000554  8FC20058   lw          v0,88(s8)
44:                     
45:                  }
9D000558  03C0E821   addu        sp,s8,zero
9D00055C  8FBF0064   lw          ra,100(sp)
9D000560  8FBE0060   lw          s8,96(sp)
9D000564  27BD0068   addiu       sp,sp,104
9D000568  03E00008   jr          ra
9D00056C  00000000   nop
Hình Kèm Theo
File Type: jpg PIC1.jpg (83.8 KB, 4 lần tải)
File Type: jpg PIC2.jpg (64.5 KB, 2 lần tải)
File Type: jpg PIC3.jpg (82.6 KB, 2 lần tải)
File Type: jpg PIC4.jpg (64.4 KB, 1 lần tải)
File Type: jpg PIC5.jpg (66.3 KB, 1 lần tải)
File Type: jpg PIC6.jpg (64.4 KB, 1 lần tải)

thay đổi nội dung bởi: ngocthanh07, 21-08-2009 lúc 11:24 AM.
ngocthanh07 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:55 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam