0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 115
1

MRF49XA, IRQ в момент передачи постоянно в 0

04.07.2012, 21:29. Показов 2544. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, найдя пару часов свободного времени и будучи рожденным очень упертым - продолжил попытки разобраться с этим замечательным трансивером.
На этот раз зашел значительно дальше, но возникла проблема - в момент передачи вывод IRQ постоянно находится в 0, при этом SDO делает все как по даташиту.
Указываю адрес TXBREG, отсылаю преамбулу -> SDO дергается, отсылаю еще (CS держу) -> SDO дергается и т.д. но вот IRQ постоянно в 0!
Перечитал даташит раз 10, перепропаял все выводы и даже запаял другую MRF49 - ничего не помогает.

<Изображение удалено>
Вот очередной исходник, AVRstudyo 6

Код
#include <avr/io.h>
#include <util/delay.h>
int temp;

#define CS_0 PORTD&=~(1<<5)
#define CS_1 PORTD|=(1<<5)
#define SCK_0 PORTD&=~(1<<4)
#define SCK_1 PORTD|=(1<<4)
#define SDI_0 PORTD&=~(1<<3)
#define SDI_1 PORTD|=(1<<3)

const long    GENCREG       = 0b10000000;   //  00111000    915 mHz, 12,5pf
const long    PMCREG       = 0b10000010;   //  00000000;   CLK-onn - 00001000  // Все Офф
const long    RXCREG       = 0b10010100;   //  10111001    134kHz, 97dBm, fast
const long    TXBREG       = 0b10111000;   //  DATA
const long    FIFORSTREG   = 0b11001010;   //  10000001      8bits, risit 0.2 v
const long    BBFCREG       = 0b11000010;   //  00101100  default
const long    AFCCREG      = 0b11000100;   //  11010111;   default
const long    CFSREG       = 0b10100111;   //  11010000  915.000MHz (default)
const long    TXCREG      = 0b10011000;   //  01000111  130 kHz, max power
const long    DRSREG       = 0b11000110;   //  00100011;   default

void SPI_Write(unsykned char spidata)
{
char i;

SDI_0;
SCK_0;
for (i=0;i<8;i=i+1)
{
if(spidata & 0x80){
SDI_1;}
else
{SDI_0;}

SCK_1;
SCK_0;
spidata=spidata<<1;
}
SDI_1;
}

void init(){

CS_0;  SPI_Write(FIFORSTREG); SPI_Write(0b10000001);  CS_1;
CS_0;  SPI_Write(FIFORSTREG); SPI_Write(0b10000011);  CS_1; // Enable symshro FIFORSTREG
CS_0;  SPI_Write(GENCREG);    SPI_Write(0b00111000);  CS_1;
CS_0;  SPI_Write(AFCCREG);    SPI_Write(0b11010111);  CS_1;   // AFCCREG ???
CS_0;  SPI_Write(CFSREG);     SPI_Write(0b11010000);  CS_1;  //915  ???
CS_0;  SPI_Write(DRSREG);     SPI_Write(0b00100011);  CS_1;
CS_0;  SPI_Write(PMCREG);     SPI_Write(0b00000000);  CS_1; // PMCREG Receive/transiver
CS_0;  SPI_Write(PMCREG);     SPI_Write(0b11111000);  CS_1; // PMCREG - all ON
CS_0;  SPI_Write(RXCREG);     SPI_Write(0b10111001);  CS_1; // 134kHz, 97dBm, fast
CS_0;  SPI_Write(TXCREG);     SPI_Write(0b01000111);  CS_1; // 130 kHz, max power
CS_0;  SPI_Write(PMCREG);     SPI_Write(0b00111000);  CS_1; // Turn Transiver enabtid
CS_0;  SPI_Write(PMCREG);     SPI_Write(0b11011000);  CS_1; // Turn Receiver - On
CS_0;  SPI_Write(GENCREG);       SPI_Write(0b01111000);  CS_1;
CS_0;  SPI_Write(FIFORSTREG); SPI_Write(0b10000011);  CS_1; // Enable symshro FIFORSTREG

_delay_us(20); CS_0;  SPI_Write(0b00000000); SPI_Write(0b00000000);  CS_1; // Read STSREG

PORTD|=(1<<7); //FSEL_1
}

int main() {

DDRD=0xFF;
PORTD=0xFF;
DDRD&=~(1<<6); // SDO - input

init();

CS_0; SPI_Write(PMCREG); SPI_Write(0b01011001); CS_1;  // Типо на передачу
CS_0; SPI_Write(GENCREG); SPI_Write(0b11011001); CS_1;
CS_0; SPI_Write(PMCREG); SPI_Write(0b01111000); CS_1;

while(1) {

CS_0;
_delay_ms(40);

SPI_Write(TXBREG);

SPI_Write(0b01010101);

while(!(bit_is_set(PIND,6)));

SPI_Write(0b01010101);

while(!(bit_is_set(PIND,6)));

SPI_Write(0b01010101);

while(!(bit_is_set(PIND,6)));

CS_1;

_delay_ms(200);
}
}
Еще часок попарившись, получилось запустить IRQ в момент посылки, однако теперь он после поднятия в 1, больше не падает - это нормально. Если прочесть STREG -> IRQ падает в 0 и опять срабатывает при посылки!
Интересно, это нормально?
Вот

<Изображение удалено>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2012, 21:29
Ответы с готовыми решениями:

Возможна ли инициализация объекта класса в момент передачи параметра в
Пример конструкции, которую я хочу заставить работать Call Me.addButton(new...

Какая технология передачи файлов по сети на данный момент самая сама
Задача. Нужно на C# написать код для передачи циклически *.xml файла по сети максимально простой и...

И снова MRF49XA
Здравствуйте, вот уже неделю копаюсь с MRF49XA, удалось запустить ее на передачу, но принять данные...

проблема с приемом на MRF49XA
Всем привет, решил собрать однокомандное управление с подтверждением на MRF49XA, сейчас пытаюсь...

0
04.07.2012, 21:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2012, 21:29
Помогаю со студенческими работами здесь

Макетки для MRF49XA
Решил повозиться с радио, собрал пару макеток-трансиверов под MRF49XA. Раскурил мануал,...

Как подключить трансивер MRF49XA к ПК , без МК.
Добрый день,всем. Возникла у меня необходимость подключить радиомодули(RXQ5) на основе MRF49XA к...

rfm70 (IRQ)
Всем привет. Могу ли я по IRQ отслеживать приход данных, например как у сс2500(они практически...

Прерывания: DIRQL и IRQ
IRQL(DIRQL) уровней меньше чем IRQ уровней. Что происходит когда появляется прерывание с IRQ выше...

Как увеличить текущий режим передачи до поддерживаемого режима передачи в ноутбуке
Доброго времени суток. Поставил вместо двд привода салазки с ssd. Зашел в CrystalDiskInfo и...

Конфликт IRQ gigabyte ga-z77p-d3
После долгого поиска проблем с мышью, выяснил, что у меня конфликт видеокарты и слотов USB (IRQ)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru