реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> PIC33EP64MC202, HELP
Bafyn
сообщение Jul 13 2018, 07:50
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 13-07-18
Пользователь №: 105 876



При выполнении цикла(в коде указано) происходит reset через произвольное количество итераций(в пределах 50). Прошу помочь решить проблему. Сильно не пинайте, в программировании микроконтроллеров полный нуб.
CODE
#include <xc.h>
#include "p33ep64mc202.h"

// DSPIC33EP64MC202 Configuration Bit Settings
// 'C' source line config statements
// FICD
#pragma config ICS = PGD1 // ICD Communication Channel Select bits (Communicate on PGEC1 and PGED1)
#pragma config JTAGEN = OFF // JTAG Enable bit (JTAG is disabled)

// FPOR
#pragma config ALTI2C1 = OFF // Alternate I2C1 pins (I2C1 mapped to SDA1/SCL1 pins)
#pragma config ALTI2C2 = OFF // Alternate I2C2 pins (I2C2 mapped to SDA2/SCL2 pins)
#pragma config WDTWIN = WIN25 // Watchdog Window Select bits (WDT Window is 25% of WDT period)

// FOSC
#pragma config POSCMD = NONE // Primary Oscillator Mode Select bits (Primary Oscillator disabled)
#pragma config OSCIOFNC = 0 // OSC2 Pin Function bit (OSC2 is clock output)
#pragma config IOL1WAY = OFF // Peripheral pin select configuration (Allow only one reconfiguration)
#pragma config FCKSM = CSECMD // Clock Switching Mode bits (Both Clock switchingswitching is enabled, Fail-safe Clock Monitor are disabled)

// FOSCSEL
#pragma config FNOSC = FRC // Oscillator Source Selection (Internal Fast RC (FRC))
#pragma config PWMLOCK = ON // PWM Lock Enable bit (Certain PWM registers may only be written after key sequence)
#pragma config IESO = ON // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)

// FGS
#pragma config GWRP = OFF // General Segment Write-Protect bit (General Segment may be written)
#pragma config GCP = OFF // General Segment Code-Protect bit (General Segment Code protect is Disabled)

// FWDT
#pragma config WDTPOST = PS32768 // Watchdog Timer Postscaler bits (1:32,768)
#pragma config WDTPRE = PR128 // Watchdog Timer Prescaler bit (1:128)
#pragma config PLLKEN = OFF // PLL Lock Enable bit (Clock switch to PLL source will wait until the PLL lock signal is valid.)
#pragma config WINDIS = OFF // Watchdog Timer Window Enable bit (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = 0 // Watchdog Timer Enable bit (Watchdog timer enabled/disabled by user software)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#define Fcy 40000000
#define BAUDRATE 9600
#define BRGVAL ((Fcy/BAUDRATE)/16)-1

void __attribute__ ( (interrupt, no_auto_psv) ) _U1RXInterrupt( void )
{
//LATA = U1RXREG;
//U1TXREG = LATA;
IFS0bits.U1RXIF = 0;
return;
}

void __attribute__ ( (interrupt, no_auto_psv) ) _U1TXInterrupt( void )
{
IFS0bits.U1TXIF = 0;
return;
}

void WriteUART1(char data)
{
while (U1STAbits.UTXBF); //wait until TXREG is available
U1TXREG = data; //send one byte
}

int main() {
//Disable WDT
RCONbits.SWDTEN = 0;

// Configure PLL prescaler, PLL postscaler, PLL divisor
PLLFBD = 41; // M=43
CLKDIVbits.PLLPOST = 0; // N2=2
CLKDIVbits.PLLPRE = 0; // N1=2

// Initiate Clock Switch to FRC oscillator with PLL (NOSC=0b001)
__builtin_write_OSCCONH(0x01);
__builtin_write_OSCCONL(OSCCON | 0x01);

// Wait for Clock switch to occur
while (OSCCONbits.COSC!= 0b001);

// Wait for PLL to lock
while (OSCCONbits.LOCK!= 1);

// configure U1MODE
U1MODEbits.UARTEN = 0; // Bit15 TX, RX DISABLED, ENABLE at end of func

//U1MODEbits.notimplemented;// Bit10
U1MODEbits.UEN = 0; // Bits8,9 TX,RX enabled, CTS,RTS not
U1MODEbits.ABAUD = 0; // Bit5 No Autobaud (would require sending '55')
U1MODEbits.BRGH = 0; // Bit3 16 clocks per bit period
U1MODEbits.PDSEL = 0; // Bits1,2 8bit, No Parity
U1MODEbits.STSEL = 0; // Bit0 One Stop Bit

// Load a value into Baud Rate Generator.
U1BRG = BRGVAL; // 20Mhz osc, 9600 Baud

// Load all values in for U1STA SFR
U1STAbits.UTXISEL1 = 0; //Bit15 Int when Char is transferred (1/2 config!)
U1STAbits.UTXISEL0 = 0; //Bit13 Other half of Bit15
U1STAbits.UTXBRK = 0; //Bit11 Disabled
U1STAbits.UTXEN = 0; //Bit10 TX pins controlled by periph
U1STAbits.URXISEL = 0; //Bits6,7 Int. on character recieved
IPC7 = 0x4400; // Mid Range Interrupt Priority level, no urgent reason
IFS0bits.U1TXIF = 0; // Clear the Transmit Interrupt Flag
IEC0bits.U1TXIE = 0; // Enable Transmit Interrupts
IFS0bits.U1RXIF = 0; // Clear the Recieve Interrupt Flag
IEC0bits.U1RXIE = 0; // Enable Recieve Interrupts

//UART pins
RPOR0bits.RP20R = 1; // RP20 as U1TX
_U1RXR = 0x36; // RPI25 as U1RX

//Enable UART
U1MODEbits.UARTEN = 1; // And turn the peripheral on
U1STAbits.UTXEN = 1;

//
ANSELA = 0;
INTCON2bits.GIE = 0;

//Отправка символа
WriteUART1('a');

//
if (U1STAbits.OERR == 1){
U1STAbits.OERR = 0;
}

//
while (1) {
//ТУТ ПРОИСХОДИТ RESET
}
return 0;
}


Сообщение отредактировал Herz - Jul 13 2018, 08:17
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 13 2018, 08:09
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



1. Как определили, что это именно сброс?
2. Причину сброса можно посмотреть в регистре статуса сброса, для PIC33 это вроде RCON (Reset Control Register).
3. Думаю что WDT не выключен все-таки.
4. Обработчики прерываний все прописаны?
Go to the top of the page
 
+Quote Post
Bafyn
сообщение Jul 13 2018, 08:17
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 13-07-18
Пользователь №: 105 876



Цитата(Arlleex @ Jul 13 2018, 11:09) *
1. Как определили, что это именно сброс?
2. Причину сброса можно посмотреть в регистре статуса сброса, для PIC33 это вроде RCON (Reset Control Register).
3. Думаю что WDT не выключен все-таки.
4. Обработчики прерываний все прописаны?

1. Пробовал зажигать микроконтроллер в начале main и гасить перед циклом все прекрасно работает, еще пробовал ставить в цикл передачу другого символа то что получилось на прикрепленном скрине
2. Так как пользуюсь программатором ICD 3, а он не поддерживает отладку этого микроконтроллера, не могу пока отслеживать регистры
3. Подскажи пожалуйста что делаю не так
#pragma config FWDTEN = 0
RCONbits.SWDTEN = 0;
Тоже сначала грешил на него, но потом пробовал во время цикла выполнять ClrWdt(); все равно ресет
4. Я новичок поэтому, не могу сказать точно, но в примерах(правда для других микроконтроллеров) других обработчиков прерываний не было и у них все работало

Сообщение отредактировал Bafyn - Jul 13 2018, 08:20
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 23:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016