Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 12.08.2016, 17:38   #1
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/8
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию PIC24FJ256GB410 + SPI

Ребят, такая проблема - пытаюсь настроить SPI, но что-то пока неудачно.

Вот код настроек:
Код:
void Init_SPI(BYTE spi_module)
{
    switch (spi_module)
    {
    case SPI1:
        IEC0bits.SPI1IE = 0; //Disable SPI Interrupts
        IEC0bits.SPI1TXIE = 0; //Disable SPI TX Interrupt
        IEC3bits.SPI1RXIE = 0; //Disable SPI RX Interrupt
        SPI1CON1Lbits.SPIEN = 0; //Disable SPI Module
        IFS0bits.SPI1IF = 0; //Clear SPI Int Flag
        IFS0bits.SPI1TXIF = 0; //Clear SPI TX Int Flag
        IFS3bits.SPI1RXIF = 0; //Clear SPI RX Int Flag
        IPC2bits.SPI1IP = 1; //Interrupt Priority
        IPC2bits.SPI1TXIP = 0; //TX Int Priority
        IPC14bits.SPI1RXIP = 1; //RX Int Priority
        IEC0bits.SPI1IE = 1; //Enable SPI Interrupts
        IEC0bits.SPI1TXIE = 0; //Disable SPI TX Interrupt
        IEC3bits.SPI1RXIE = 1; //Enable SPI RX Interrupt
        uint16_t i = SPI1BUFL; //Clear buffer
#ifdef TX_MODE
        SPI1CON1Lbits.MSTEN = 1; //Master Mode
#elif defined(RX_MODE)
        SPI1CON1Lbits.MSTEN = 0; //Slave Mode
#endif
        SPI1CON1Lbits.SPISIDL = 1; //Halt Module in Idle Mode
        SPI1CON1Lbits.DISSDO = 0; //SDO Pin Controlled by the Module
        SPI1CON1Hbits.AUDEN = 0; //Audio Protocol is Disabled
        SPI1CON1Lbits.MODE16 = 0; //8-bit Communication Mode
        SPI1CON1Lbits.MODE32 = 0; //...
        SPI1CON1Lbits.SMP = 0; //Input Data is Sampled at the Middle of Data Out Time
        SPI1CON1Lbits.CKE = 0; //Transmit Happens on Transition from Ide clk state to active clk state
        SPI1CON1Lbits.SSEN = 0; //Not Using SS1 Pin
        SPI1CON1Lbits.CKP = 1; //Ide State for clk = high, active = low
        SPI1CON1Lbits.DISSDI = 0; //SDI Pin Controlled by the Module
        SPI1CON1Lbits.MCLKEN = 0; //PBCLK is Used by the BRG
        SPI1CON1Lbits.SPIFE = 0; //Frame Sync Pulse Precedes the First Bit Clk
        SPI1CON1Lbits.ENHBUF = 0; //Enhanced Buffer Mode is Disabled
        SPI1CON1Hbits.SPISGNEXT = 0; //Data from RX FIFO not Sign-Extended
        SPI1CON1Hbits.IGNROV = 1; //Receive Overflow is not a Critical Error (data in the FIFO is not Overwritten)
        SPI1CON1Hbits.IGNTUR = 1; //Transmit Underrun is not a Critical Error
        SPI1CON1Hbits.AUDMONO = 0; //Not in Use
        SPI1CON1Hbits.URDTEN = 1; //Transmit SPI1URDT buff during Transmit Underrun
        SPI1CON1Hbits.AUDMOD = 0b11; //Not in Use
        SPI1CON1Hbits.FRMEN = 0; //Framed Mode Disabled
        SPI1CON1Hbits.FRMSYNC = 0; //Frame Sync Pulse Output (Master) - Not in Use
        SPI1CON1Hbits.FRMPOL = 1; //Frame Sync Pulse = active-high - Not in Use
        SPI1CON1Hbits.MSSEN = 0; //Slave Select is Disabled
        SPI1CON1Hbits.FRMSYPW = 0; //Frame Sync Pulse is One Clk Wide - Not in Use
        SPI1CON1Hbits.FRMCNT = 0b000; //Generates a Frame Sync Pulse on each Serial Word - Not in Use
        SPI1CON2Lbits.WLENGTH = 0b00000; //See MODE bits
        SPI1STATLbits.FRMERR = 0; //Clear Frame Error is Detected
        SPI1BRGLbits.BRG = 0; //BaudRate = Fpb / 2
        SPI1IMSKHbits.RXWIEN = 0; //Disable receive buffer element watermark interrupt
        SPI1IMSKHbits.RXMSK = 0b00000; //RX Buffer Mask
        SPI1IMSKHbits.TXWIEN = 0; //Disable Transmit Buffer Element Watermark Interrupt
        SPI1IMSKHbits.TXMSK = 0b00000; //TX Buffer Mask
        SPI1STATLbits.SPIROV = 0; //Clear SPIROV bit
        SPI1CON1bits.SPIEN = 1; //Enable SPI1
        break;
    }
}
настройка пинов:
Код:
    Unlock_PPS();
    
    //SPI1 Module
    TRIS_SDO1 = TRIS_OUT;
    TRIS_SDI1 = TRIS_IN;
    TRIS_SCK1 = TRIS_OUT;
    // Assign SCK1 to RP17
    RPOR8bits.RP17R = _RPOUT_SCK1OUT;
    // Assign SDO1 to RP16
    RPOR8bits.RP16R = _RPOUT_SDO1;
    // Assign SDI1 to RP30
    RPINR20bits.SDI1R = 30;

    //SPI2 Module
    TRIS_SDO2 = TRIS_OUT;
    TRIS_SDI2 = TRIS_IN;
    TRIS_SCK2 = TRIS_IN;
    // Assign SCK1 to RP3
    RPINR20bits.SCK1R = 3;
    // Assign SDO2 to RP4
    RPOR2bits.RP4R = _RPOUT_SDO2;
    // Assign SDI2 to RP12
    RPINR20bits.SDI1R = 12;
    
    Lock_PPS();
отправка:
Код:
void SPI_Write(BYTE spi, unsigned char data)
{
    switch (spi)
    {
    case SPI1:
        SPI1BUFL = data; // write to buffer for TX
        while (SPI1STATLbits.SPITBF); // wait for transfer complete
        break;
    }
}
и цикл:
Код:
void Main_Loop()
{
    while (true)
    {
#ifdef TX_MODE
        SPI_Write(SPI1, 0x15);
        Delay_ms(100);
#endif
    }
}
Так, теперь, что происходит при этом. На SCK1 постоянно импульсы, а на SDO1 ничего нет. Не пойму в чем проблема... Буду рад любой помощи))
geotox вне форума   Ответить с цитированием
Старый 13.08.2016, 19:37   #2
varostov
Senior Member
 
Аватар для varostov
 
Регистрация: 14.11.2007
Адрес: Ростов-на-Дону
Возраст: 51
Сообщений: 125
Вес репутации: 384/38
varostov is just really nicevarostov is just really nicevarostov is just really nicevarostov is just really nice
По умолчанию Re: PIC24FJ256GB410 + SPI

Самое очевидное, что сразу бросается в глаза - нет операций чтения буфера SPI. Имхо, у ТС это, очевидно, первый опыт с hard SPI PIC24F...
Дело в том, что аппаратный модуль SPI ВСЕГДА работает в дуплексе - даже когда вы только передаёте данные, он всё равно синхронно принимает то, что приходит по линии SDI. Ну а при отсутствии чтения принятых данных модуль входит в состояние ошибки и перестаёт нормально работать. ПОЭТОМУ: надо при передаче данных после отправки байта делать "холостое" считывание буфера. Минимально и достаточно чтения в "NULL":
Код:
 #define SPI1_Get()  SPI1BUF
Ну а при чтении данных наоборот, посылать сначала в SPI "холостой" байт (по импортной классификации "Dummy byte"), а уж затем из SPInBUF считывать запрошенные данные.

P.S. И не забывать про уже наработанные, пусть и индусами, библиотеки и драйверы, предоставляемые Microchip
varostov вне форума   Ответить с цитированием
Старый 13.08.2016, 19:50   #3
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/8
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC24FJ256GB410 + SPI

Так, SPI1 заработал! Видны импульсы на осцилографе. Есть точно такой же PIC настроенный как Slave. Первый ПИК и второй подключенны следующим образом:
PIC1 PIC2
SDO1(out) - SDI1(in)
SDI1(in) - SDO1(out)
SCK1(out) - SCK1(in)

Теперь проблема состоит в том, что второй пик не входит в прерывание.

Вот исходники:

Main.C
Код:
#include <p24FJ256GB410.h>
#include <stdlib.h>
#include <stdbool.h>
#include "SPI.h"
#include "Main.h"
#include "Pins.h"
#include "Delays.h"

/* Configuration Bits */
#pragma config GSS = OFF // General Segment Code Protection Disabled
#pragma config BSS = OFF // Boot Segment Code Protection Disabled
#pragma config CSS = DIS // Configuration Segment Protection Disabled
#pragma config FNOSC = FRCPLL // Oscillator = Fast RC Oscillator with PLL Module
#pragma config PLLMODE = PLL8X // 8xPLL
#pragma config IESO = ON // Internal External Switchover (Start up device with FRC, then switch to user-selected oscillator source)
#pragma config FWDTEN = OFF // Disable Watchdog
#pragma config WDTPS = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA = PR128 // WDT Prescaler (Prescaler ratio of 1:128)
#pragma config IOL1WAY = ON // IOLOCK One-Way Set Enable (Once set the IOLOCK bit cannot be cleared)
#pragma config ICS = PGx2 // ICD on pins PGEC2/PGED2
#pragma config JTAGEN = OFF // JTAG Disabled
#pragma config OSCIOFCN = ON // OSCO/CLKO/RC15 functions as RC15
#pragma config POSCMOD = HS // Fast RC Oscillator with divide-by-n (FRCDIV)
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock switching and Fail-Safe Clock Monitor are disabled)
#pragma config SOSCSEL = ON // SOSC is used in crystal (SOSCI/SOSCO) mode

int main()
{
    Initialize();
    Main_Loop();

    return (EXIT_SUCCESS);
}

void Main_Loop()
{
    while (true)
    {
#ifdef TX_MODE
        SPI_Write(SPI1, 0xAB);
        Delay_ms(50);
#endif
    }
}

void Initialize()
{
    Init_Pins();
    Init_SPI(SPI1);
}
Main.h
Код:
#ifndef MAIN_H
#define MAIN_H

void Main_Loop();
void Initialize();
void Init_Pins();

#define RX_MODE
//#define TX_MODE

#endif /* MAIN_H */
Spi.c
Код:
#include <p24FJ256GB410.h>
#include <stdint.h>
#include "SPI.h"
#include "Pins.h"
#include "Main.h"

void Init_SPI(BYTE spi_module)
{
    switch (spi_module)
    {
    case SPI1:
        IEC0bits.SPI1IE = 0; //Disable SPI Interrupts
        IEC0bits.SPI1TXIE = 0; //Disable SPI TX Interrupt
        IEC3bits.SPI1RXIE = 0; //Disable SPI RX Interrupt
        SPI1CON1Lbits.SPIEN = 0; //Disable SPI Module
        IFS0bits.SPI1IF = 0; //Clear SPI Int Flag
        IFS0bits.SPI1TXIF = 0; //Clear SPI TX Int Flag
        IFS3bits.SPI1RXIF = 0; //Clear SPI RX Int Flag
        IPC2bits.SPI1IP = 1; //Interrupt Priority
        IPC2bits.SPI1TXIP = 0; //TX Int Priority
        IPC14bits.SPI1RXIP = 1; //RX Int Priority
        IEC0bits.SPI1IE = 1; //Enable SPI Interrupts
        IEC0bits.SPI1TXIE = 0; //Disable SPI TX Interrupt
        IEC3bits.SPI1RXIE = 1; //Enable SPI RX Interrupt
        uint16_t i = SPI1BUFL; //Clear buffer
#ifdef TX_MODE
        SPI1CON1Lbits.MSTEN = 1; //Master Mode
#elif defined(RX_MODE)
        SPI1CON1Lbits.MSTEN = 0; //Slave Mode
#endif
        SPI1CON1Lbits.SPISIDL = 1; //Halt Module in Idle Mode
        SPI1CON1Lbits.DISSDO = 0; //SDO Pin Controlled by the Module
        SPI1CON1Hbits.AUDEN = 0; //Audio Protocol is Disabled
        SPI1CON1Lbits.MODE16 = 0; //8-bit Communication Mode
        SPI1CON1Lbits.MODE32 = 0; //...
        SPI1CON1Lbits.SMP = 0; //Input Data is Sampled at the Middle of Data Out Time
        SPI1CON1Lbits.CKE = 0; //Transmit Happens on Transition from Ide clk state to active clk state
        SPI1CON1Lbits.SSEN = 0; //Not Using SS1 Pin
        SPI1CON1Lbits.CKP = 1; //Ide State for clk = high, active = low
        SPI1CON1Lbits.DISSDI = 0; //SDI Pin Controlled by the Module
        SPI1CON1bits.DISSCK = 0; //SCK Pin Controlled by the Module
        SPI1CON1Lbits.MCLKEN = 0; //PBCLK is Used by the BRG
        SPI1CON1Lbits.SPIFE = 0; //Frame Sync Pulse Precedes the First Bit Clk
        SPI1CON1Lbits.ENHBUF = 0; //Enhanced Buffer Mode is Disabled
        SPI1CON1Hbits.SPISGNEXT = 0; //Data from RX FIFO not Sign-Extended
        SPI1CON1Hbits.IGNROV = 1; //Receive Overflow is not a Critical Error (data in the FIFO is not Overwritten)
        SPI1CON1Hbits.IGNTUR = 1; //Transmit Underrun is not a Critical Error
        SPI1CON1Hbits.AUDMONO = 0; //Not in Use
        SPI1CON1Hbits.URDTEN = 1; //Transmit SPI1URDT buff during Transmit Underrun
        SPI1CON1Hbits.AUDMOD = 0b11; //Not in Use
        SPI1CON1Hbits.FRMEN = 0; //Framed Mode Disabled
        SPI1CON1Hbits.FRMSYNC = 0; //Frame Sync Pulse Output (Master) - Not in Use
        SPI1CON1Hbits.FRMPOL = 1; //Frame Sync Pulse = active-high - Not in Use
        SPI1CON1Hbits.MSSEN = 0; //Slave Select is Disabled
        SPI1CON1Hbits.FRMSYPW = 0; //Frame Sync Pulse is One Clk Wide - Not in Use
        SPI1CON1Hbits.FRMCNT = 0b000; //Generates a Frame Sync Pulse on each Serial Word - Not in Use
        SPI1CON2Lbits.WLENGTH = 0b00000; //See MODE bits
        SPI1STATLbits.FRMERR = 0; //Clear Frame Error is Detected
        SPI1BRGLbits.BRG = 8; //BaudRate = Fpb / 2
        SPI1IMSKHbits.RXWIEN = 0; //Disable receive buffer element watermark interrupt
        SPI1IMSKHbits.RXMSK = 0b00000; //RX Buffer Mask
        SPI1IMSKHbits.TXWIEN = 0; //Disable Transmit Buffer Element Watermark Interrupt
        SPI1IMSKHbits.TXMSK = 0b00000; //TX Buffer Mask
        SPI1STATLbits.SPIROV = 0; //Clear SPIROV bit
        SPI1CON1bits.SPIEN = 1; //Enable SPI1
        break;
    }
}

void SPI_Write(BYTE spi, unsigned char data)
{
    switch (spi)
    {
    case SPI1:
        SPI1BUFL = data; // write to buffer for TX
        while (SPI1STATLbits.SPITBF); // wait for transfer complete
        break;
    }
}

unsigned char SPI_Write_Read(BYTE spi, unsigned char data)
{
    switch (spi)
    {
    case SPI1:
        SPI1BUFL = data; // write to buffer for TX
        while (!SPI1STATLbits.SPIRBF); // wait transfer complete
        return SPI1BUFL; // read the received value 
    case SPI2:
        SPI2BUFL = data; // write to buffer for TX
        while (!SPI2STATLbits.SPIRBF); // wait transfer complete
        return SPI2BUFL; // read the received value 
    default:
        return 0xFF;
    }
}

unsigned char SPI_Read(BYTE spi)
{
    unsigned char received;
    switch (spi)
    {
    case SPI1:
        received = SPI_Write_Read(spi, 0xFF);
        return received;
    case SPI2:
        received = SPI_Write_Read(spi, 0xFF);
        return received;
    default:
        return 0xFF;
    }
}

void __attribute__((__interrupt__, auto_psv)) _SPI1Interrupt(void)
{
    if (IFS3bits.SPI1RXIF)
    {
        unsigned char received = SPI1BUFL;
    }
    IFS3bits.SPI1RXIF = 0;
}
Pins.c
Код:
#include <p24FJ256GB410.h>
#include "Pins.h"
#include "Main.h"

void Init_Pins()
{
    Unlock_PPS();

#ifdef TX_MODE
    //SPI1 Module
    TRIS_SDO1 = TRIS_OUT;
    TRIS_SDI1 = TRIS_IN;
    TRIS_SCK1 = TRIS_OUT;
    ANS_SCK1 = DIGITAL;
    ANS_SDI1 = DIGITAL;
    ANS_SDO1 = DIGITAL;
    
    //SCK1 to RP15
    RPOR7bits.RP15R = _RPOUT_SCK1OUT;
    //SDO1 to RP30
    RPOR15bits.RP30R = _RPOUT_SDO1;
    //SDI1 to RP39
    RPINR20bits.SDI1R = 39;
#elif defined(RX_MODE)
    //SPI1 Module
    TRIS_SDO1 = TRIS_OUT;
    TRIS_SDI1 = TRIS_IN;
    TRIS_SCK1 = TRIS_IN;
    ANS_SCK1 = DIGITAL;
    ANS_SDI1 = DIGITAL;
    ANS_SDO1 = DIGITAL;
    
    //SCK1 to RP15
    RPINR20bits.SCK1R = 15;
    //SDO1 to RP30
    RPOR15bits.RP30R = _RPOUT_SDO1;
    //SDI1 to RP39
    RPINR20bits.SDI1R = 39;
#endif
    Lock_PPS();
}
Pins.h
Код:
#ifndef PINS_H
#define PINS_H

#include <p24FJ256GB410.h>

#define Unlock_PPS() __builtin_write_OSCCONL(OSCCON & 0xbf)
#define Lock_PPS() __builtin_write_OSCCONL(OSCCON | 0x40)

#define SDO1 LATFbits.LATF2 //RP15
#define SCK1 LATFbits.LATF8 //RP15
#define SDI1 LATCbits.LATC2 //RPI39

#define TRIS_SDO1 TRISFbits.TRISF2
#define TRIS_SCK1 TRISFbits.TRISF8
#define TRIS_SDI1 TRISCbits.TRISC2

#define ANS_SDO1 ANSFbits.ANSF2
#define ANS_SCK1 ANSFbits.ANSF8
#define ANS_SDI1 ANSCbits.ANSC2

#define TRIS_IN 1
#define TRIS_OUT 0

#define ANALOG 1
#define DIGITAL 0

#define LOW 0
#define HIGH 1

void Init_Pins();

#endif /* PINS_H */
При програмировании мастера раскоменчен #define TX_MODE, при слейв - RX_MODE.
geotox вне форума   Ответить с цитированием
Старый 13.08.2016, 20:39   #4
varostov
Senior Member
 
Аватар для varostov
 
Регистрация: 14.11.2007
Адрес: Ростов-на-Дону
Возраст: 51
Сообщений: 125
Вес репутации: 384/38
varostov is just really nicevarostov is just really nicevarostov is just really nicevarostov is just really nice
По умолчанию Re: PIC24FJ256GB410 + SPI

Извините, но ситуация мне напоминает Масяню: "У меня не начинается..."
Сложно ждать прерывание, если Вы его сначала не инициализировали:

Код:
//SPI3_SLAVE
    _SPI3IF=0;
    _SPI3IE=1;
varostov вне форума   Ответить с цитированием
Старый 13.08.2016, 21:06   #5
varostov
Senior Member
 
Аватар для varostov
 
Регистрация: 14.11.2007
Адрес: Ростов-на-Дону
Возраст: 51
Сообщений: 125
Вес репутации: 384/38
varostov is just really nicevarostov is just really nicevarostov is just really nicevarostov is just really nice
По умолчанию Re: PIC24FJ256GB410 + SPI

P.S. И зачем засорять текст длиннющими названиями регистров, если в файле p24FJ256GB410.h определены для Вашего удобства сокращённые вызовы, например:

Код:
#define _SPI1IF             IFS0bits.SPI1IF
#define _SPI1TXIF         IFS0bits.SPI1TXIF
#define _SPI1IE             IEC0bits.SPI1IE
#define _SPI1TXIE         IEC0bits.SPI1TXIE
(компилятор XC16)
varostov вне форума   Ответить с цитированием
Старый 13.08.2016, 22:16   #6
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/8
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC24FJ256GB410 + SPI

Ну как же не инициализировал...
Код:
        IPC2bits.SPI1IP = 1; //Interrupt Priority
        IPC2bits.SPI1TXIP = 0; //TX Int Priority
        IPC14bits.SPI1RXIP = 1; //RX Int Priority
        IEC0bits.SPI1IE = 1; //Enable SPI Interrupts
        IEC0bits.SPI1TXIE = 0; //Disable SPI TX Interrupt
        IEC3bits.SPI1RXIE = 1; //Enable SPI RX Interrupt
        uint16_t i = SPI1BUFL; //Clear buffer
Или этого не достаточно?
geotox вне форума   Ответить с цитированием
Старый 14.08.2016, 18:24   #7
varostov
Senior Member
 
Аватар для varostov
 
Регистрация: 14.11.2007
Адрес: Ростов-на-Дону
Возраст: 51
Сообщений: 125
Вес репутации: 384/38
varostov is just really nicevarostov is just really nicevarostov is just really nicevarostov is just really nice
По умолчанию Re: PIC24FJ256GB410 + SPI

Увы, никогда не думал, что для включения прерываний надо их вначале отключить:
Код:
        IEC0bits.SPI1IE = 0; //Disable SPI Interrupts
        IEC0bits.SPI1TXIE = 0; //Disable SPI TX Interrupt
        IEC3bits.SPI1RXIE = 0; //Disable SPI RX Interrupt
Поэтому, увидев первые строчки, не стал сканировать текст дальше...

Что могу предположить:
1) Зачем-то активировано прерывание ошибок SPI1
Код:
IEC0bits.SPI1IE = 1; //Enable SPI Interrupts
Этот бит в одном месте описан как SPI1 General, а в другом как SPI1 Error, но в любом случае, если включаете разрешение прерывания, будьте добры написать для него обработчик, иначе не исключены казусы.

2) Ещё рекомендую всегда самому прописывать приоритет ядра процессора, не надеясь на default. Я, например, устанавливаю приоритет ядра =2, тогда прерывания с приоритетом "0" вообще отключены, с приоритетом "1" вызывают только взведение флагов (иногда очень удобно), а "серьёзные" прерывания имеют приоритет "4", гарантированно выбрасывающий в обработчик. Если по ошибке (или по дефолту, описания иногда врут) приоритет ядра процессора >=2, то Ваше прерывание с единичным приоритетом никогда не войдёт в обработчик.

К сожалению, до 410 контроллера у меня руки пока не дошли (хоть уже и 610 образцы подоспели), поэтому дать проверенный пример кода не могу. Как вариант, можете попробовать в MCC (Microchip Code Configurator - плагин в MPLABX) включить SPI slave и "подсмотреть" инициализацию.
varostov вне форума   Ответить с цитированием
Старый 14.08.2016, 18:39   #8
geotox
Junior Member
 
Регистрация: 19.03.2015
Сообщений: 13
Вес репутации: 100/8
geotox will become famous soon enoughgeotox will become famous soon enough
По умолчанию Re: PIC24FJ256GB410 + SPI

Самого удивило, что надо пока отключать прерывания, а потом включать, но решил все же делать как описанно в документации. Спасибо за совет, но, к сожалению, пока ничего не помогает. Будем копать дальше)))
geotox вне форума   Ответить с цитированием
Старый 14.08.2016, 18:56   #9
varostov
Senior Member
 
Аватар для varostov
 
Регистрация: 14.11.2007
Адрес: Ростов-на-Дону
Возраст: 51
Сообщений: 125
Вес репутации: 384/38
varostov is just really nicevarostov is just really nicevarostov is just really nicevarostov is just really nice
По умолчанию Re: PIC24FJ256GB410 + SPI

Когда хотите переконфигурировать модуль на другой режим - тогда обязательно. При сбросе/включении контроллера всё отключено по дефолту. Для супергарантии (если в точку входа можно попасть иначе) можно обнулить все xxxIE разом, стерев соответствующие регистры.

Кстати, не забываем про режим пошаговой отладки - наблюдая за взведением разрешений/флагов/приоритетов прерываний и соответствующим переходом в обработчики многое ранее неизвестное проясняется...
varostov вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с SPI (PIC18LFxxxx + RFM23) desperado Продукция MICROCHIP 37 27.10.2013 19:00
ENC28J60 не работает SPI k.evgeny Продукция MICROCHIP 2 01.01.2012 18:57
SPI интерфейс. PIC16F887 + CC2500 RF module. Cavalryman Вопросы начинающих 45 08.07.2010 18:59
Инициализация аппаратного SPI chingiz Продукция MICROCHIP 3 18.04.2010 15:16
Прерывание SPI в dsPIC33FJ33GP202 Любопытный Продукция MICROCHIP 6 28.11.2008 17:29


Часовой пояс GMT +3, время: 01:08.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot