:::

論壇索引


Board index » All Posts (news9801)




dsp33fj UART RX中斷後RESET
#1
初級會員
初級會員


請問有人遇過當RX中斷收到值MCU就會RESET嗎?裡面只有放下面這兩個程式碼Struct以及中斷旗標歸零

void __attribute__( ( interrupt , no_auto_psv ) ) _U1RXInterrupt( void )
{
UART_Status_Flag.bits.UART_RX_ReadStart = 1; //開始讀取旗標
IFS0bits.U1RXIF = 0; //清除UART2 Rereived的中斷旗標。
}

會發現MCU好像RESET是因為明明程式有些東西值會執行一次,但是卻一直重複執行,
後來一個一個註解掉後發現在RX中斷把下面程式註解掉就正常

UART_Status_Flag.bits.UART_RX_ReadStart = 1; //開始讀取旗標

請問在RX中斷裡面是不能執行這個部份嗎?

發表於: 2021/8/2 16:29
頂部


Re: Dspic33FJ64MC508A Timer1設定問題
#2
初級會員
初級會員


這邊大致上了解。

不過版主提到的用MCC去做設定,但是我剛剛看MCC支援列表,好像沒有支援dsPIC33FJ64MC508A這顆MCU

發表於: 2021/7/9 11:30
頂部


Re: Dspic33FJ64MC508A Timer1設定問題
#3
初級會員
初級會員


這邊已經找到問題,CLKDIVbits.PLLPRE設錯,之前設定備註是除4,應該將這個設為CLKDIVbits.PLLPRE = 0b00010才對

發表於: 2021/7/6 9:58
頂部


Re: Dspic33FJ64MC508A Timer1設定問題
#4
初級會員
初級會員


可以順便問一下,當震盪器設定好之後,有方法可以驗證自己的震盪器設定的結果嗎?

發表於: 2021/7/6 9:22
頂部


Dspic33FJ64MC508A Timer1設定問題
#5
初級會員
初級會員


想請問一下目前是在外部接一顆20Mhz的震盪器,但是目前設定Timer1為10us觸發一次中斷,
進中斷讓I/O腳一直反向動作的時間為500ms,但是出來的時間為3.5秒,是否是我哪邊設定有問題呢?

----------------------OSC設定----------------------
設定圖檔連結
https://imgur.com/saWEPft


/* Disable Watch Dog Timer */
RCONbits.SWDTEN = 0;
//-----OSCCON 震盪器控制暫存器-----//
OSCCONbits.COSC = 0b011; //目前震盪器選擇 0b011 = XTPLL, HSPLL, ECPLL
OSCCONbits.NOSC = 0b011; //新震盪器選擇 0b011 = XTPLL, HSPLL, ECPLL
OSCCONbits.CLKLOCK = 1; //PLL鎖定選擇
//OSCCONbits.LOCK = 0; //PLL鎖定狀態 這個暫存器只能讀取
OSCCONbits.CF = 0; //震盪器故障檢測
OSCCONbits.LPOSCEN = 1; //輔助(LP)震盪器 ON/OFF
OSCCONbits.OSWEN = 0; //震盪器切換 ON/OFF
//-----CLKDIV 震盪器除頻設定暫存器-----//
CLKDIVbits.ROI = 0; //中斷恢復
CLKDIVbits.DOZE = 0b010; //MCU除頻選擇
CLKDIVbits.DOZEN = 0; //DOZE模式 ON/OFF
CLKDIVbits.FRCDIV = 0b000; //內部快速RC震盪器除頻比
CLKDIVbits.PLLPOST = 0b00; //PLL VCO 輸出除頻比 輸出/2
//-----輸入震盪器 經過以下除頻器需在0.8Mhz~8Mhz之間-----
//當外部震盪器為20Mhz,可由此除頻設為4,將震盪頻率降為5Mhz,可符合設定規範
CLKDIVbits.PLLPRE = 0b01100; //PLL輸入分頻比 輸入/4

//-----PLLFBD PLL 倍頻比暫存器-----//
PLLFBDbits.PLLDIV = 30; //PLL倍頻比 32倍

//-----判斷目前是否設定為帶PLL的主震盪器(XT HS EC)這三種-----//
while(OSCCONbits.COSC != 0b011);
//-----判斷目前PLL是否處於失效情況或是被靜止-----//
while(OSCCONbits.LOCK != 1);

----------------------Timer 1 設定----------------------
設定圖檔連結
https://imgur.com/Wh7aEX2


T1CONbits.TON = 0; //Timer Disable 確認關閉Timer1再進行初始化
T1CONbits.TCS = 0; //Timer 時鐘選擇 1 = 引腳(T1CK)外部時鐘 0 = 內部時鐘(FOSC / 2)
T1CONbits.TGATE = 0; //禁用門控定時器模式
T1CONbits.TCKPS = 0; //Timer 預除器 1:1

TMR1 = 0; //中斷暫存器歸零
PR1 = 400 - 1; //40,000,000 hz / 100,000 hz = 400 (10uS 觸發一次)

IPC0bits.T1IP=7; //設定中斷優先等級 7 = 最高
IFS0bits.T1IF = 0; //將Timer 1 中斷旗標歸零
IEC0bits.T1IE=1; //中斷允許功能 開啟

// T1CONbits.TSIDL = 0; //空閒模式繼續工作
// T1CONbits.TSYNC = 0; //Timer 外部時鐘輸入同步選擇 TCS為0時忽略

T1CONbits.TON = 1; //Timer Enable 啟動Timer1

----------------------Timer 1 中斷----------------------
void __attribute__((interrupt,auto_psv)) _T1Interrupt(void)
{
Toggle_cnt++;
if(Toggle_cnt >= 50000)
{
BRAKE_O = !BRAKE_O;
Toggle_cnt = 0;
}
}

發表於: 2021/7/5 15:04
頂部


Re: 暫存器設定波浪號問題
#6
初級會員
初級會員


目前有找到問題
在專案名稱右鍵→Properties→點XC16(Globlal options)→Override default device support→Compiler loacation
這樣波浪號就不會跳出來了。

如果是用XC8的就選XC8(Globlal options)

然而mggpyhs 說的問題我也是有遇到,有時候得把IDE重開才會正常

常常遇到一些莫名的問題用到有點心累

發表於: 2021/7/5 8:32
頂部


暫存器設定波浪號問題
#7
初級會員
初級會員


想問一下在MPLAB X開啟一個新專案,在設定相關暫存器時出現紅色波浪號,提示是unable to resolve identifier

但是BUILD卻會成功,請問這個問題要從哪個部份去找呢?

Attach file:



jpg  擷取.JPG (57.73 KB)
45583_60dc256b8eeb2.jpg 708X347 px

發表於: 2021/6/30 16:06
頂部


dsp33fj gpio的input可以設定pull high或者pull low嗎?
#8
初級會員
初級會員


目前想問一下是否可以在軟體那邊設定GPIO的腳為是否可以自行設定Pull High或者Pull Low,還是只能用硬體方式設計呢?

發表於: 2021/6/1 13:44
頂部


Re: Dspic33FJ64MC508A 第一次上電 UART RX中斷收不到值
#9
初級會員
初級會員


更正,再次確認後發現,第一筆資料是有收到的,也是完整的。
第一次上電等待資料整筆收完,實際收到的資料是往右位移一個byte。

假設PC傳送10個byte給RX陣列接收,RX陣列0的位置應該為PC發送的第1個Byte,但是第一次上電RX陣列第0個Byte都是0,RX陣列第1個Byte才是PC發送的第一個Byte。

正常收到值應該是這樣
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;

第一次實際收到值為
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;
array[4] = 4;
array[5] = 5;

發表於: 2020/6/30 13:24
頂部


Dspic33FJ64MC508A 第一次上電 UART RX中斷收不到值
#10
初級會員
初級會員


想請問一下,有人遇到過第一次上電的時候,UART RX中斷有收不到值的問題嗎?

目前用Debug去看,以一筆資料有10個Byte,這10個Byte在第一次RX中斷都不會進去,當我傳送第二次的時候才會正常,請問有人有遇過這個問題嗎?

還是我以下UART的設定有問題呢?

OpenUART1(UART_EN UART_IDLE_CON UART_EN_WAKE UART_DIS_LOOPBACK UART_DIS_ABAUD &
              
UART_NO_PAR_8BIT UART_1STOPBIT UART_IrDA_DISABLE UART_MODE_SIMPLEX &
              
UART_UEN_00 UART_UXRX_IDLE_ONE UART_BRGH_SIXTEEN,
              
UART_INT_TX UART_IrDA_POL_INV_ZERO UART_SYNC_BREAK_DISABLED UART_TX_ENABLE &
              
UART_INT_RX_CHAR UART_ADR_DETECT_DIS UART_RX_OVERRUN_CLEAR,
              
UART1Period);
    
ConfigIntUART1UART_RX_INT_EN UART_RX_INT_PR4 UART_TX_INT_DIS UART_TX_INT_PR4 );

//-----UART RX Interrup-----//
void __attribute__( ( interrupt no_auto_psv ) ) _U1RXInterruptvoid )
{
    
UART1_ReceiveBuffer[UART1_Read_Count] = ReadUART1();
    
UART_Status_Flag.bits.UART_RX_ReadStart 1;     
    
UART1_Read_Count++;                             
    
UART1_Count 0;                                
    
IFS0bits.U1RXIF 0;         
}

發表於: 2020/6/30 11:11
頂部



(1) 2 3 »



:::

Microchip連結

https://mu.microchip.com/page/tmu
http://www.microchip.com.tw/modules/tadnews/page.php?ncsn=2&nsn=41
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
https://page.microchip.com/APAC-PrefCenters-TW.html
https://www.youtube.com/user/MicrochipTechnology
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
https://www.microchip.com/development-tools/
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/
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源