• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::

論壇索引


Board index » All Posts




Re: 請問在台灣和美國網站如何搜尋 SPI 的範例程式(Code Examples)?
管理員
管理員



發表於: 2022/11/9 9:35

Edited by KevinLu on 2022年12月23日 16:55:29
頂部


請問在台灣和美國網站如何搜尋 SPI 的範例程式(Code Examples)?
資深會員
資深會員


大家好:

我想用兩顆 PIC 做 SPI 通訊,一顆做 Master,一顆做 Slave,不知道台灣和美國網站有沒有辦法搜尋到 SPI 的範例程式(Code Examples)?
或是在什麼開發板的範例程式裡面有?謝謝。

發表於: 2022/11/8 10:10
頂部


Re: TB3202 example code
初級會員
初級會員


hi,
can any one help with the request?

thanks,

發表於: 2022/11/7 18:01
best regards,
Anthony
頂部


Re: 請問XC8如何MIX C and asm?
管理員
管理員


jlian你好,如果情況允許建議使用C語言開發程式,XC8 Compiler 會將程式編譯為組合語言後自動放置於對應的記憶體位址。
如果需要使用組合語言開發,需確保使用的程式碼符合MCU架構和組譯器的規範,可以參考以下文件或教材:
MPLAB XC8 PIC Assembler User's Guide
MPLAB XC8 PIC Assembler Guide For Embedded Engineers
MPLAB XC8 PIC Assembler Migration Guide
MPLAB XC8 C Compiler User's Guide
CAE空中教室 - PIC1002

發表於: 2022/11/7 13:39
頂部


Re: 請問XC8如何MIX C and asm?
資深會員
資深會員


Dear KevinLu :

再增加一些程式後,錯誤又發生了...
放棄,太難搞了!

謝謝.

發表於: 2022/11/7 9:22
頂部


Re: 請問XC8如何MIX C and asm?
資深會員
資深會員


Dear KevinLu :

我發現 unsigned char d1; 放的位置很重要!要放在C的變數最上面.
但如放在其他C檔?這樣很麻煩..........不好弄,compiler能修正?

謝謝.

發表於: 2022/11/7 9:12
頂部


Re: 請問XC8如何MIX C and asm?
資深會員
資深會員


Dear KevinLu :

1.我增加一些變數後就出現那個錯誤!為何?

2.
Non line specific message::: advisory: (1492) using updated 32-bit floating-point libraries; improved accuracy might increase code size
make[2]: *** [dist/default/production/Test_Mix.X.production.hex] Error 1

謝謝.

發表於: 2022/11/7 8:58
頂部


Re: 請問XC8如何MIX C and asm?
資深會員
資深會員


Dear KevinLu :

error: (1356) fixup overflow referencing psect bssBANK3 (0x76) into 1 byte at 0x2BC/0x2 -> 0x15E (dist/default/production\30KW-NTC-ACT-TX.X.production.o 79/0x4)

出現這個???

謝謝.

發表於: 2022/11/4 16:59
頂部


Re: pic32mk的HLVD功能
初級會員
初級會員


感謝KevinLu的回覆, 以下是我的步驟

我先在我的初始化那邊加入以下程式
#ifndef __MPLAB_DEBUGGER_SIMULATOR
    
while ((HLVDCON _HLVDCON_BGVST_MASK) != (_HLVDCON_BGVST_MASK))
        ;
#endif
    
HLVDCONCLR _HLVDCON_VDIR_MASK;                   // Event occurs when voltage equals or falls below trip point
    
HLVDCONSET = (0b0110) << _HLVDCON_HLVDL_POSITION;  // 3.0V
    
HLVDCONCLR _HLVDCON_SIDL_MASK;
    
HLVDCONSET _HLVDCON_ON_MASK;


然後在interrupt.c那邊加入
void __attribute__((nomips16)) _nmi_handler(void) {
    
uint32_t getRNMICON RNMICON;
    
SYSKEY              0x00000000;
    
SYSKEY              0xAA996655;
    
SYSKEY              0x556699AA;

  ...

    if ((
getRNMICON _RNMICON_HLVD_MASK) == _RNMICON_HLVD_MASK) {
        
// Programmable High/Low-Voltage Detect
        
EEPROM_WordWrite(0x7000x87);
        
char          timestamp[16];
        
uart_buffer_t uartMessage = {};
        
formatString_Timestamp(timestamp);
        
sprintf(uartMessage.data,                      //
                
"rn%sRNMICON = 0x%08X;(%s:%d)rn",  //
                
timestamp,                             //
                
RNMICON,                               //
                
__FILE__,                              //
                
__LINE__);
        
uartMessage.len strlen(uartMessage.data);
        
UART_PushTxQueue(UART_6, &uartMessage);
        
RNMICONCLR _RNMICON_HLVD_MASK;
    }

    ...

    
SYSKEY 0x33333333;
    
asm volatile("eret");  // return from interrupt
}


我在我的按鈕那邊強制觸發HLVD
void Debounce_Tasks(void) {
    static 
bool flagChecked[DEBOUNCE_PIN_MAX];
    
bool        flagDebugMessage false;
    
getInputPin();

    for (
size_t pinIndex 0pinIndex DEBOUNCE_PIN_MAXpinIndex++) {
        if (
object[pinIndex].pinSetting.pullState == PULL_STATE_NONE) {
            
// 設置浮接的輸入腳不偵測
            
if (flagChecked[pinIndex] == false) {
                
flagChecked[pinIndex] = true;
                
flagDebugMessage      true;
            }
            
Nop();
        } else {
            if (
object[pinIndex].pinSetting.input == object[pinIndex].pinTriggerCondition) {
                if (
object[pinIndex].pinState != PIN_STATE_PRESSED) {
                    if ((
object[pinIndex].timer[DEBOUNCE_TIMER_PRESS] + >= BOUNCE_TIME)) {
                        
object[pinIndex].pinState PIN_STATE_PRESSED;
                        if (
pinIndex == DEBOUNCE_PIN_SWITCH_2) {
#ifndef __MPLAB_DEBUGGER_SIMULATOR
                            
ramStart[0] = BTL_TRIGGER_PATTERN;
                            
ramStart[1] = BTL_TRIGGER_PATTERN;
                            
ramStart[2] = BTL_TRIGGER_PATTERN;
                            
ramStart[3] = BTL_TRIGGER_PATTERN;
                            while (
UART5_WriteIsBusy())
                                ;
                            
formatString_Timestamp(timestamp);
                            
sprintf(uartMessage.data,                    //
                                    
"rn%sEntering Bootloader...rn",  //
                                    
timestamp                            //
                            
);
                            
uartMessage.len strlen(uartMessage.data);
                            
UART5_Write(uartMessage.datauartMessage.len);
                            while (
UART5_TransmitComplete() != true)
                                ;
                            
SYS_RESET_SoftwareReset();
#endif
                        
}
                        if (
pinIndex == DEBOUNCE_PIN_SWITCH_3) {
#ifndef __MPLAB_DEBUGGER_SIMULATOR
                            
formatString_Timestamp(timestamp);
                            
sprintf(uartMessage.data,                              //
                                    
"rn%sRNMICONSET = _RNMICON_HLVD_MASK;rn",  //
                                    
timestamp                                      //
                            
);
                            
uartMessage.len strlen(uartMessage.data);
                            
UART_PushTxQueue(UART_6, &uartMessage);

                            
SYSKEY     0x00000000;
                            
SYSKEY     0xAA996655;
                            
SYSKEY     0x556699AA;
                            
RNMICONSET _RNMICON_HLVD_MASK;
                            
SYSKEY     0x33333333;
                            
formatString_Timestamp(timestamp);
                            
sprintf(uartMessage.data,                      //
                                    
"rn%sRNMICON = 0x%08X;(%s:%d)rn",  //
                                    
timestamp,                             //
                                    
RNMICON,                               //
                                    
__FILE__,                              //
                                    
__LINE__);
                            
uartMessage.len strlen(uartMessage.data);
                            
UART_PushTxQueue(UART_6, &uartMessage);
#endif
                        
}

                        
flagDebugMessage true;
                    } else {
                        
object[pinIndex].timer[DEBOUNCE_TIMER_PRESS]++;
                    }
                }
                
object[pinIndex].timer[DEBOUNCE_TIMER_RELEASE] = 0;
            } else {
                if (
object[pinIndex].pinState != PIN_STATE_RELEASED) {
                    if (
object[pinIndex].timer[DEBOUNCE_TIMER_RELEASE] + >= BOUNCE_TIME) {
                        
object[pinIndex].pinState PIN_STATE_RELEASED;
                        
flagDebugMessage          true;
                    } else {
                        
object[pinIndex].timer[DEBOUNCE_TIMER_RELEASE]++;
                    }
                }
                
object[pinIndex].timer[DEBOUNCE_TIMER_PRESS] = 0;
            }
        }
        if (
flagDebugMessage) {
            
flagDebugMessage false;
            
formatString_Debounce(object[pinIndex].pinStatepinIndex);
        }
    }
}


我進Debug看, 我始終沒有進入過NMI, 然後我就在while加入polling RNMICON
if ((RNMICON _RNMICON_HLVD_MASK) == _RNMICON_HLVD_MASK) {
            
// Programmable High/Low-Voltage Detect
            
SYSKEY 0x00000000;
            
SYSKEY 0xAA996655;
            
SYSKEY 0x556699AA;
            
formatString_Timestamp(timestamp);
            
sprintf(uartMessage.data,                      //
                    
"rn%sRNMICON = 0x%08X;(%s:%d)rn",  //
                    
timestamp,                             //
                    
RNMICON,                               //
                    
__FILE__,                              //
                    
__LINE__);
            
uartMessage.len strlen(uartMessage.data);
            
UART_PushTxQueue(UART_6, &uartMessage);

            
RNMICONCLR _RNMICON_HLVD_MASK;
            
SYSKEY     0x33333333;
        }


這樣我可以強制舉旗RNMICON->HLVD, 但無法舉旗HLVDCON->HLEVT, 我猜是HLVD沒有被開啟, 但也沒有PMD使它開啟

以上是我測試的方法, 但我都沒有辦法觸發HLVD與進入NMI.

發表於: 2022/11/4 16:45
頂部


MPLAB X IDE v6.00 修改完專案名稱 編譯出現錯誤
新會員
新會員


大家好:

最近在變更現有的專案名稱後,執行編譯會出現錯誤。
這些錯誤看起來跟makefile有關,如附件圖片。
若是將專案修改回原來的名稱,又可以正常編譯。

我修改專案名稱的方式,是從MPLAB X IDE中對Project按右鍵中的Rename來進行修改,並且有勾選"Also Rename Project Folder"。

請問會導致編譯錯誤的原因是什麼,以及如何正確變更專案名稱?

IDE Version: v6.00
Compiler: XC32 (v4.10)

謝謝

Attach file:



jpg  error message.JPG (244.32 KB)
78209_6364acdd02d0f.jpg 1523X804 px

發表於: 2022/11/4 14:11
頂部



« 1 ... 45 46 47 (48) 49 50 51 ... 7523 »



:::

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... ]

教育訓練中心

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