AD9952: Не работает компаратор и PLL

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Serge_6989
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пн окт 05, 2009 11:12:16

AD9952: Не работает компаратор и PLL

Сообщение Serge_6989 »

Доброго времени суток.
Я пытаюсь завести AD9952 и столкнулся с трудностями. Написал функцию для отправки команд на DDS:
Спойлер

Код: Выделить всё

void ad9952_write_reg(u8 reg, u32 data)
{          u8 ii=0;
    u8 inst = reg & 0x1F; // 0x9F for read
    u8 nBytes = 1;
    
    if(reg == REG_CFR1 || reg == REG_FTW0)
        nBytes = 4;
    else if(reg == REG_ASF || reg == REG_POW)
        nBytes = 2;
    else if(reg == REG_CFR2)
        nBytes = 3;
        
    GPIO_ResetBits(adPORTi, adIOUpd);
    GPIO_ResetBits(adPORTi, adSCLK);
    
    for(ii = 8; ii > 0; ii--)
    {    
        GPIO_ResetBits(adPORTi, adSCLK);
        if((inst & 0x80) == 0x80)
            GPIO_SetBits(adPORTi, adSDIO);
        else
            GPIO_ResetBits(adPORTi, adSDIO);
        GPIO_SetBits(adPORTi, adSCLK);
        inst = inst << 1;        
    }
    
    data = data << ((4 - nBytes) * 8);
    for(ii = nBytes * 8; ii > 0; ii--)
    {    
        GPIO_ResetBits(adPORTi, adSCLK);
        if((data & 0x80000000) == 0x80000000)
            GPIO_SetBits(adPORTi, adSDIO);
        else
            GPIO_ResetBits(adPORTi, adSDIO);
        GPIO_SetBits(adPORTi, adSCLK);
        data = data << 1;        
    }
    GPIO_SetBits(adPORTi, adIOUpd);    
    Delay_us(3);
    GPIO_ResetBits(adPORTi, adIOUpd);
}
Функция отправляет сначала 8 бит адрес регистра, куда надо записать, затем нужное колличество байт данных. По формуле из даташита вычисляется код частоты и отправляется. Частота выставляется верно.
Проблема: при попытке настроить PLL либо выходная частота не меняется (чаще всего), либо падает в 2 раза (стало быть Fsysclk удвоилась, хотя такого множителя нет), либо генерация пропадает вовсе. Побывал различные значения битов [7:3], [2] и [1:0] регистра CFR2. Не могу понять в чем дело. CLKMODSELECT на земле.
Запись в CFR1 работает нормально. Микруха б/у, мог ли предыдущий владелец как-то спалить блок PLL? Других мыслей уже не осталось. К тому же встроенный компоратор тоже не работает.
Реклама
Ответить

Вернуться в «Разные вопросы по МК»