• slider image 442
  • slider image 492
  • slider image 493
  • slider image 494
  • slider image 495
  • slider image 496
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users




(1) 2 »


Re: 請問C中斷的問題
#11
版主
版主


查看用戶資訊
因為 C18 處理中斷時會有很多的資料儲存動作,這是一種自保的動作,因為沒有人知道程式在哪裡發生中斷,誰該存誰該不用存。要讓中斷有最快的反應時間建議使用中斷程式用組合語言來寫,並善用 Shadow Register 的快速存取功能。

發表於: 2007/2/7 15:16
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#10
高級會員
高級會員


查看用戶資訊
可以直接先處理完一些資料後...再跳到中斷副程式
應該可以加快速度...試試看..
//------------------
org 0x0018
{ goto asmfun }
//-----------------
asmfun:
{
push W,status 等會用到的暫存器
assembly -> 處理資料
pop status,W
goto interrupt
}
//----------------
void isr_low_direct(void)
{
......其它中斷副程式..
}

發表於: 2007/2/7 10:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#9
高級會員
高級會員


查看用戶資訊
恩 我有用到capture的功能了
我現在是要做差分曼徹斯特的解碼
所以我的想法是捕捉電位準的改變
然後去判斷他位準改變的時間是不是在合理的改變範圍內
例如有一個差分曼徹斯特碼為10 01 01 10 01--->0 1 0 1 1
我的解法是看作 1 00 10 11 00 1.... 遇到出現00 或 11時 解出為1
事實上是判斷發生中斷的時間
假設曼徹斯特碼01每次電位改變的時間為120uS 而001為240uS
當時間抓到為連續兩次的每次中斷時間間隔為120(+-10%)就判斷為0
當時間抓到為每次中斷時間間隔為240(+-10%)就判斷為1
超過這些時間就判斷為錯誤
這樣如果我是使用4MHz加中斷進入副程式的時間花掉101uS,因為進入中斷副程式花掉62uS,
離開中斷回到主程式花了52uS,這樣加起來就花掉了215uS
這樣就超過了我在解曼徹斯特0所需的時間了。
接下來還要處理移位(來接收完112bit)所需要處理的時間。
所以要解出0就無法解出了,雖然硬體可以判斷到中斷的發生,也抓的到每次中斷間隔的時間,但是來不及用這些數據去判斷1或0,我的想法是這樣,不知道有沒有錯。

發表於: 2007/2/5 14:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#8
高級會員
高級會員


查看用戶資訊
我會把這個中斷副程式放在isr_high..且優先權設為最高..
試試看...另外..看晶片有沒有倍頻..

為什麼進入中斷後..處理的時間不夠??..不是很懂..
capture功能能運用上去嗎??...

發表於: 2007/2/5 12:22
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#7
高級會員
高級會員


查看用戶資訊
果然是遇到大災難了
之前試好的程式只能單獨跑
不能加到我的主程式中
現在又回到原來的問題了
進入中斷後的處理時間不夠
造成我在取樣的時間沒辦法正確的解出我要的信號
除了換震盪器以外
請問還有什麼辦法呢

發表於: 2007/2/5 11:09
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#6
高級會員
高級會員


查看用戶資訊
這些大部份是進入到中斷前..必需要做的PUSH POP動作...
除非很清楚知道哪些暫存器在中斷中不會被使用到...
不然不做這些動作..會造成大災難..
詳細情況可能版大會更清楚...

另外有沒有試過使用 isr_high 來執行中斷副程式...
不知道會不會有差??

發表於: 2007/2/5 9:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#5
高級會員
高級會員


查看用戶資訊
剛剛試了用c中插組語來寫
可以達成我要的結果
把原本的改成這樣
#pragma code low_vector=0x0018
void isr_low_direct(void)
{_asm
rcall diff_manchester
nop
retfie 0
_endasm
}
#pragma code

直接在0x0018中用使用call而不再先跳至void isr_low(void)中
看起來應該是如果使用c的中斷時,如果事先宣告了下面的語法
就會在進入堆疊前,先執行了一堆搬移的動作
例如要先搬移FSR、TBLTPR、TABLAT、PRODL、PRODH、PCLATH等暫存器到FSR1指標的位址中;請問這些搬移的動作在C語法中的功用是什麼?如果不做這些動作會有什麼影響?

#pragma interrupt isr_low
#pragma code

發表於: 2007/2/2 17:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#4
高級會員
高級會員


查看用戶資訊
我中斷的時間不是從程式一開始run到中斷的時間
而是從中斷發生後進入到低中斷向量副程式所花的時間,就是在發生中斷與執行副程式之前基本上就需要花費63us的時間。
#pragma interrupt isr_low
void isr_low(void)*1
{diff_manchester();*2<-------執行到這裡大概就花63us
}
#pragma code
我看了一下反組譯後的組語寫法,主要時間是花費在*1*2

因為我在in_line assembly上也遇到了一些問題,所以對於c中使用assembly的使用沒有什麼把握。

發表於: 2007/2/2 16:12
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#3
高級會員
高級會員


查看用戶資訊
進入到中斷副程式..應該是看中斷的條件何時成立...
用組語寫跟用C寫..主要是差在程式效率還有程式碼大小吧?

如果你的意思是從程式開始run到第1次中斷發生的時間..
有可能是C18有含入startup code..程式寫法還有Complier的
結果都會影響到...

如果一定要很精確的時間..可以在C18中加上組語來改善..
W401教材都有講到...可以參考看看...

發表於: 2007/2/2 15:46
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請問C中斷的問題
#2
高級會員
高級會員


查看用戶資訊
進入到中斷副程式..應該是看中斷的條件何時成立...
用組語寫跟用C寫..主要是差在程式效率還有程式碼大小吧?

如果你的意思是從程式開始run到第1次中斷發生的時間..
有可能是C18有含入startup code..程式寫法還有Complier的
結果都會影響到...

如果一定要很精確的時間..可以在C18中加上組語來改善..
W401教材都有講到...可以參考看看...

發表於: 2007/2/2 15:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------