# ---------------------------------------------------------------------------------
SI5351_UT_SRCS=\
+gdb_stdio.c \
src/si5351_ut.c \
src/new_i2c.c \
src/si53xx.c \
src/startup_stm32f4xx.s \
src/init.c \
-si5351_ut.elf: $(SI5351_UT_SRCS:.c=.O3.o) libstm32f4.a
- $(CC) $(CFLAGS) -O3 $^ -o $@ $(LIBPATHS) $(LIBS)
+si5351_ut.elf: $(SI5351_UT_SRCS:.c=.o) libstm32f4.a
+ $(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS)
# ---------------------------------------------------------------------------------
/*
- Copyright (C) 2016 David Rowe
+ Copyright (C) 2016 Leon
All rights reserved.
}
(void) I2C_DEVICE->SR2;
Timeout = I2C_STIMEOUT;
- while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE)) {
+ while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) {
if ((Timeout--) == 0) return I2C_timeout(0x104);
}
I2C_SendData(I2C_DEVICE, Register);
Timeout = I2C_STIMEOUT;
while ( (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) ||
- (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF))
+ (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BTF))
) {
if ((Timeout--) == 0) return I2C_timeout(0x105);
}
I2C_GenerateSTART(I2C_DEVICE, ENABLE);
Timeout = I2C_STIMEOUT;
- while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_SB)) {
+ while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_SB)) {
if ((Timeout--) == 0) return I2C_timeout(0x106);
}
I2C_Send7bitAddress(I2C_DEVICE, Addr, I2C_Direction_Receiver);
if ((Timeout--) == 0) return I2C_timeout(0x107);
}
(void) I2C_DEVICE->SR2;
- while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE)) {
+ while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_RXNE)) {
if ((Timeout--) == 0) return I2C_timeout(0x108);
}
I2C_GenerateSTOP(I2C_DEVICE, ENABLE);
}
(void) I2C_DEVICE->SR2;
Timeout = I2C_STIMEOUT;
- while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE)) {
+ while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) {
if ((Timeout--) == 0) return I2C_timeout(0x104);
}
I2C_SendData(I2C_DEVICE, Register);
Timeout = I2C_STIMEOUT;
while ( (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) ||
- (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF))
+ (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BTF))
) {
if ((Timeout--) == 0) return I2C_timeout(0x105);
}
I2C_GenerateSTART(I2C_DEVICE, ENABLE);
Timeout = I2C_STIMEOUT;
- while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_SB)) {
+ while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_SB)) {
if ((Timeout--) == 0) return I2C_timeout(0x106);
}
I2C_Send7bitAddress(I2C_DEVICE, Addr, I2C_Direction_Receiver);
for (cnt=0; cnt<N; cnt++) {
if((cnt+1) >= N) {
// ACK disable
- I2C_AcknowledgeConfig(I2C1, DISABLE);
+ I2C_AcknowledgeConfig(I2C_DEVICE, DISABLE);
// Stop-Sequenz
- I2C_GenerateSTOP(I2C1, ENABLE);
+ I2C_GenerateSTOP(I2C_DEVICE, ENABLE);
}
Timeout = I2C_STIMEOUT;
- while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE)) {
+ while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_RXNE)) {
if ((Timeout--) == 0) return I2C_timeout(0x108);
}
result=I2C_ReceiveData(I2C_DEVICE);
#include <assert.h>
#include "new_i2c.h"
#include "si53xx.h"
+#include "gdb_stdio.h"
+
+#define printf gdb_stdio_printf
int main(void) {
+ int ret;
+
+ printf("starting\n");
I2C_Setup();
- si5351_init(0x60, 5, 25000000);
- si5351_set_freq(10000000, 0, SI5351_CLK0);
+ si5351_init(0, SI5351_CRYSTAL_LOAD_6PF, 0);
+
+ ret = si5351_set_freq(1000000000ULL, 0, SI5351_CLK0);
+ printf(" ret = %d\n", ret);
+
while(1);
}
#include "math.h"
#include "si53xx.h"
+#include "gdb_stdio.h"
+#define printf gdb_stdio_printf
+
void si5351_write(uint8_t REGaddr, uint8_t data) {
// ignoring errors
// Waiting for the bite
Si5351_Config.I2C_ErrorCode=I2C_NewWriteRegister(Si5351_Config.I2C_add, REGaddr, data);
+ printf(" si5351_write: REGaddr: 0x%02x data...: 0x%02x", REGaddr, data);
+ if (Si5351_Config.I2C_ErrorCode > 0xff)
+ printf(" ErrorCode: 0x%02x\n", Si5351_Config.I2C_ErrorCode);
+ else
+ printf("\n");
}
void si5351_write_bulk(uint8_t REGaddr, uint8_t bytes, uint8_t *data) {
uint8_t si5351_read(uint8_t REGaddr) {
uint8_t reg_val;
Si5351_Config.I2C_ErrorCode=I2C_NewReadRegister(Si5351_Config.I2C_add,REGaddr);
+ printf(" si5351_read.: REGaddr: 0x%02x", REGaddr);
if (Si5351_Config.I2C_ErrorCode>0xff) {
reg_val=0;
+ printf(" ErrorCode: 0x%02x\n", Si5351_Config.I2C_ErrorCode);
} else {
reg_val=(uint8_t)(Si5351_Config.I2C_ErrorCode & 0xff);
Si5351_Config.I2C_ErrorCode=0;
+ printf(" reg_val: 0x%02x\n", reg_val);
}
return reg_val;
}
*------------------------------------------------------------------------------
*/
void si5351_init(uint8_t I2C_Address, uint8_t xtal_load_c, uint32_t ref_osc_freq) {
+ printf("si5351_init\n");
+
Si5351_Config.clk0_freq=0;
Si5351_Config.lock_plla = SI5351_CLKNONE;
Si5351_Config.lock_pllb = SI5351_CLKNONE;
uint8_t reg_val = 0x12; // 0b010010 reserved value bits
reg_val |= xtal_load_c;
si5351_write(SI5351_CRYSTAL_LOAD, reg_val);
+
+ // DR: test of I2C
+ reg_val = si5351_read(SI5351_CRYSTAL_LOAD);
+ printf("reg_val: 0x%02x\n", reg_val);
+
// Change the ref osc freq if different from default
// Divide down if greater than 30 MHz
if (ref_osc_freq != 0) {
uint8_t int_mode = 0;
uint8_t div_by_4 = 0;
+ printf("si5351_set_freq:\n");
+
// PLL bounds checking
if(pll_freq != 0) {
if ((pll_freq < SI5351_PLL_VCO_MIN * SI5351_FREQ_MULT)
}
}
+ printf("freq: 0x%0x 0x%0x\n", (uint32_t)(freq >> 32), (uint32_t)(freq & 0xffffffff));
+
// Lower bounds check
if(freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT) {
freq = SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT;
freq = SI5351_MULTISYNTH_MAX_FREQ * SI5351_FREQ_MULT;
}
+ printf("freq: 0x%0x 0x%0x\n", (uint32_t)(freq >> 32), (uint32_t)(freq & 0xffffffff));
+
// Select the proper R div value
r_div = si5351_select_r_div(&freq);
// Only good for Si5351A3 variant at the moment
switch(clk) {
case SI5351_CLK0:
+ printf("case SI5351_CLK0\n");
pll_freq = si5351_multisynth_calc(freq, 0, &ms_reg);
target_pll = SI5351_PLLA;
write_pll = 1;
si5351_set_ms_source(SI5351_CLK0, SI5351_PLLA);
+ printf("pll_freq: 0x%0x 0x%0x\n", (uint32_t)(pll_freq >> 32), (uint32_t)(pll_freq & 0xffffffff));
+ printf("freq: 0x%0x 0x%0x\n", (uint32_t)(freq >> 32), (uint32_t)(freq & 0xffffffff));
+
Si5351_Config.plla_freq = pll_freq;
Si5351_Config.clk0_freq = freq;
break;