Update to current master library
can fixes are compile tested only. I don't have those boards. f3 i2c is tested on i2c and gives the same results l1 low power demo seems to have been broken for some time already. => should be fixed, but not something I'm going to work on right now.
This commit is contained in:
@@ -18,12 +18,13 @@
|
|||||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libopencm3/stm32/rcc.h>
|
#include <stddef.h>
|
||||||
#include <libopencm3/stm32/flash.h>
|
|
||||||
#include <libopencm3/stm32/gpio.h>
|
|
||||||
#include <libopencm3/cm3/nvic.h>
|
#include <libopencm3/cm3/nvic.h>
|
||||||
#include <libopencm3/cm3/systick.h>
|
#include <libopencm3/cm3/systick.h>
|
||||||
#include <libopencm3/stm32/can.h>
|
#include <libopencm3/stm32/can.h>
|
||||||
|
#include <libopencm3/stm32/gpio.h>
|
||||||
|
#include <libopencm3/stm32/flash.h>
|
||||||
|
#include <libopencm3/stm32/rcc.h>
|
||||||
|
|
||||||
struct can_tx_msg {
|
struct can_tx_msg {
|
||||||
uint32_t std_id;
|
uint32_t std_id;
|
||||||
@@ -195,11 +196,11 @@ void sys_tick_handler(void)
|
|||||||
|
|
||||||
void usb_lp_can_rx0_isr(void)
|
void usb_lp_can_rx0_isr(void)
|
||||||
{
|
{
|
||||||
uint32_t id, fmi;
|
uint32_t id;
|
||||||
bool ext, rtr;
|
bool ext, rtr;
|
||||||
uint8_t length, data[8];
|
uint8_t fmi, length, data[8];
|
||||||
|
|
||||||
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data);
|
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data, NULL);
|
||||||
|
|
||||||
if (data[0] & 1)
|
if (data[0] & 1)
|
||||||
gpio_clear(GPIOA, GPIO8);
|
gpio_clear(GPIOA, GPIO8);
|
||||||
|
|||||||
@@ -18,12 +18,13 @@
|
|||||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libopencm3/stm32/rcc.h>
|
#include <stddef.h>
|
||||||
#include <libopencm3/stm32/flash.h>
|
|
||||||
#include <libopencm3/stm32/gpio.h>
|
|
||||||
#include <libopencm3/cm3/nvic.h>
|
#include <libopencm3/cm3/nvic.h>
|
||||||
#include <libopencm3/cm3/systick.h>
|
#include <libopencm3/cm3/systick.h>
|
||||||
#include <libopencm3/stm32/can.h>
|
#include <libopencm3/stm32/can.h>
|
||||||
|
#include <libopencm3/stm32/gpio.h>
|
||||||
|
#include <libopencm3/stm32/flash.h>
|
||||||
|
#include <libopencm3/stm32/rcc.h>
|
||||||
|
|
||||||
struct can_tx_msg {
|
struct can_tx_msg {
|
||||||
uint32_t std_id;
|
uint32_t std_id;
|
||||||
@@ -195,11 +196,11 @@ void sys_tick_handler(void)
|
|||||||
|
|
||||||
void usb_lp_can_rx0_isr(void)
|
void usb_lp_can_rx0_isr(void)
|
||||||
{
|
{
|
||||||
uint32_t id, fmi;
|
uint32_t id;
|
||||||
bool ext, rtr;
|
bool ext, rtr;
|
||||||
uint8_t length, data[8];
|
uint8_t fmi, length, data[8];
|
||||||
|
|
||||||
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data);
|
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data, NULL);
|
||||||
|
|
||||||
if (data[0] & 1)
|
if (data[0] & 1)
|
||||||
gpio_clear(GPIOA, GPIO8);
|
gpio_clear(GPIOA, GPIO8);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <libopencm3/cm3/nvic.h>
|
#include <libopencm3/cm3/nvic.h>
|
||||||
#include <libopencm3/cm3/systick.h>
|
#include <libopencm3/cm3/systick.h>
|
||||||
#include <libopencm3/stm32/can.h>
|
#include <libopencm3/stm32/can.h>
|
||||||
@@ -173,11 +174,11 @@ void sys_tick_handler(void)
|
|||||||
|
|
||||||
void usb_lp_can_rx0_isr(void)
|
void usb_lp_can_rx0_isr(void)
|
||||||
{
|
{
|
||||||
uint32_t id, fmi;
|
uint32_t id;
|
||||||
bool ext, rtr;
|
bool ext, rtr;
|
||||||
uint8_t length, data[8];
|
uint8_t fmi, length, data[8];
|
||||||
|
|
||||||
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data);
|
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data, NULL);
|
||||||
|
|
||||||
if (data[0] & 0x40)
|
if (data[0] & 0x40)
|
||||||
gpio_clear(GPIOB, GPIO4);
|
gpio_clear(GPIOB, GPIO4);
|
||||||
|
|||||||
@@ -18,12 +18,13 @@
|
|||||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <libopencm3/stm32/rcc.h>
|
#include <stddef.h>
|
||||||
#include <libopencm3/stm32/flash.h>
|
|
||||||
#include <libopencm3/stm32/gpio.h>
|
|
||||||
#include <libopencm3/cm3/nvic.h>
|
#include <libopencm3/cm3/nvic.h>
|
||||||
#include <libopencm3/cm3/systick.h>
|
#include <libopencm3/cm3/systick.h>
|
||||||
#include <libopencm3/stm32/can.h>
|
#include <libopencm3/stm32/can.h>
|
||||||
|
#include <libopencm3/stm32/gpio.h>
|
||||||
|
#include <libopencm3/stm32/flash.h>
|
||||||
|
#include <libopencm3/stm32/rcc.h>
|
||||||
|
|
||||||
struct can_tx_msg {
|
struct can_tx_msg {
|
||||||
uint32_t std_id;
|
uint32_t std_id;
|
||||||
@@ -177,11 +178,11 @@ void sys_tick_handler(void)
|
|||||||
|
|
||||||
void usb_lp_can_rx0_isr(void)
|
void usb_lp_can_rx0_isr(void)
|
||||||
{
|
{
|
||||||
uint32_t id, fmi;
|
uint32_t id;
|
||||||
bool ext, rtr;
|
bool ext, rtr;
|
||||||
uint8_t length, data[8];
|
uint8_t fmi, length, data[8];
|
||||||
|
|
||||||
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data);
|
can_receive(CAN1, 0, false, &id, &ext, &rtr, &fmi, &length, data, NULL);
|
||||||
|
|
||||||
if (data[0] & 1)
|
if (data[0] & 1)
|
||||||
gpio_clear(GPIOA, GPIO6);
|
gpio_clear(GPIOA, GPIO6);
|
||||||
|
|||||||
@@ -54,14 +54,13 @@ static void i2c_setup(void)
|
|||||||
i2c_reset(I2C1);
|
i2c_reset(I2C1);
|
||||||
/* Setup GPIO pin GPIO_USART2_TX/GPIO9 on GPIO port A for transmit. */
|
/* Setup GPIO pin GPIO_USART2_TX/GPIO9 on GPIO port A for transmit. */
|
||||||
gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO6 | GPIO7);
|
gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO6 | GPIO7);
|
||||||
gpio_set_af(GPIOB, GPIO_AF4, GPIO6| GPIO7);
|
gpio_set_af(GPIOB, GPIO_AF4, GPIO6 | GPIO7);
|
||||||
i2c_peripheral_disable(I2C1);
|
i2c_peripheral_disable(I2C1);
|
||||||
//configure ANFOFF DNF[3:0] in CR1
|
//configure ANFOFF DNF[3:0] in CR1
|
||||||
i2c_enable_analog_filter(I2C1);
|
i2c_enable_analog_filter(I2C1);
|
||||||
i2c_set_digital_filter(I2C1, I2C_CR1_DNF_DISABLED);
|
i2c_set_digital_filter(I2C1, I2C_CR1_DNF_DISABLED);
|
||||||
//Configure PRESC[3:0] SDADEL[3:0] SCLDEL[3:0] SCLH[7:0] SCLL[7:0]
|
/* HSI is at 8Mhz */
|
||||||
// in TIMINGR
|
i2c_set_speed(I2C1, i2c_speed_sm_100k, 8);
|
||||||
i2c_100khz_i2cclk8mhz(I2C1);
|
|
||||||
//configure No-Stretch CR1 (only relevant in slave mode)
|
//configure No-Stretch CR1 (only relevant in slave mode)
|
||||||
i2c_enable_stretching(I2C1);
|
i2c_enable_stretching(I2C1);
|
||||||
//addressing mode
|
//addressing mode
|
||||||
@@ -134,9 +133,6 @@ static void clock_setup(void)
|
|||||||
#define ACC_OUT_X_L_A 0x28
|
#define ACC_OUT_X_L_A 0x28
|
||||||
#define ACC_OUT_X_H_A 0x29
|
#define ACC_OUT_X_H_A 0x29
|
||||||
|
|
||||||
// gpio_port_write(GPIOE, (I2C_ISR(i2c) & 0xFF) << 8);
|
|
||||||
// my_usart_print_int(USART2, (I2C_ISR(i2c) & 0xFF));
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
clock_setup();
|
clock_setup();
|
||||||
@@ -144,25 +140,24 @@ int main(void)
|
|||||||
usart_setup();
|
usart_setup();
|
||||||
printf("Hello, we're running\n");
|
printf("Hello, we're running\n");
|
||||||
i2c_setup();
|
i2c_setup();
|
||||||
/*uint8_t data[1]={(0x4 << ACC_CTRL_REG1_A_ODR_SHIFT) | ACC_CTRL_REG1_A_XEN};*/
|
uint8_t cmd = ACC_CTRL_REG1_A;
|
||||||
uint8_t data[1]={0x97};
|
uint8_t data;
|
||||||
write_i2c(I2C1, I2C_ACC_ADDR, ACC_CTRL_REG1_A, 1, data);
|
i2c_transfer7(I2C1, I2C_ACC_ADDR, &cmd, 1, &data, 1);
|
||||||
data[0]=0x08;
|
cmd = ACC_CTRL_REG4_A;
|
||||||
write_i2c(I2C1, I2C_ACC_ADDR, ACC_CTRL_REG4_A, 1, data);
|
i2c_transfer7(I2C1, I2C_ACC_ADDR, &cmd, 1, &data, 1);
|
||||||
int16_t acc_x;
|
int16_t acc_x;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
read_i2c(I2C1, I2C_ACC_ADDR, ACC_STATUS, 1, data);
|
cmd = ACC_STATUS;
|
||||||
/*my_usart_print_int(USART2, data[0]);*/
|
i2c_transfer7(I2C1, I2C_ACC_ADDR, &cmd, 1, &data, 1);
|
||||||
read_i2c(I2C1, I2C_ACC_ADDR, ACC_OUT_X_L_A, 1, data);
|
cmd = ACC_OUT_X_L_A;
|
||||||
acc_x=data[0];
|
i2c_transfer7(I2C1, I2C_ACC_ADDR, &cmd, 1, &data, 1);
|
||||||
read_i2c(I2C1, I2C_ACC_ADDR, ACC_OUT_X_H_A, 1, data);
|
acc_x = data;
|
||||||
acc_x|=(data[0] << 8);
|
cmd = ACC_OUT_X_H_A;
|
||||||
|
i2c_transfer7(I2C1, I2C_ACC_ADDR, &cmd, 1, &data, 1);
|
||||||
|
acc_x |= ((uint16_t)data << 8);
|
||||||
printf("data was %d\n", acc_x);
|
printf("data was %d\n", acc_x);
|
||||||
//int i;
|
|
||||||
//for (i = 0; i < 800000; i++) /* Wait a bit. */
|
|
||||||
// __asm__("nop");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ static void reset_clocks(void)
|
|||||||
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
|
.ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
|
||||||
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
|
.ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
|
||||||
.voltage_scale = PWR_SCALE2,
|
.voltage_scale = PWR_SCALE2,
|
||||||
.flash_config = FLASH_ACR_LATENCY_0WS,
|
.flash_waitstates = FLASH_ACR_LATENCY_0WS,
|
||||||
.apb1_frequency = 4194000,
|
.apb1_frequency = 4194000,
|
||||||
.apb2_frequency = 4194000,
|
.apb2_frequency = 4194000,
|
||||||
.msi_range = RCC_ICSCR_MSIRANGE_4MHZ,
|
.msi_range = RCC_ICSCR_MSIRANGE_4MHZ,
|
||||||
|
|||||||
Submodule libopencm3 updated: 8c74128ff6...e3c78b8825
Reference in New Issue
Block a user