Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
f2386737
Commit
f2386737
authored
Oct 10, 2015
by
devsaurus
Browse files
rework of (H)SPI API
parent
9cde0bbb
Changes
5
Hide whitespace changes
Inline
Side-by-side
app/driver/spi.c
View file @
f2386737
...
@@ -64,7 +64,7 @@ void spi_lcd_9bit_write(uint8 spi_no,uint8 high_bit,uint8 low_8bit)
...
@@ -64,7 +64,7 @@ void spi_lcd_9bit_write(uint8 spi_no,uint8 high_bit,uint8 low_8bit)
* Description : SPI master initial function for common byte units transmission
* Description : SPI master initial function for common byte units transmission
* Parameters : uint8 spi_no - SPI module number, Only "SPI" and "HSPI" are valid
* Parameters : uint8 spi_no - SPI module number, Only "SPI" and "HSPI" are valid
*******************************************************************************/
*******************************************************************************/
void
spi_master_init
(
uint8
spi_no
,
unsigned
cpol
,
unsigned
cpha
,
unsigned
databits
,
uint32_t
clock_div
)
void
spi_master_init
(
uint8
spi_no
,
unsigned
cpol
,
unsigned
cpha
,
uint32_t
clock_div
)
{
{
uint32
regvalue
;
uint32
regvalue
;
...
@@ -107,7 +107,7 @@ void spi_master_init(uint8 spi_no, unsigned cpol, unsigned cpha, unsigned databi
...
@@ -107,7 +107,7 @@ void spi_master_init(uint8 spi_no, unsigned cpol, unsigned cpha, unsigned databi
CLEAR_PERI_REG_MASK
(
SPI_USER
(
spi_no
),
SPI_FLASH_MODE
|
SPI_USR_MISO
|
CLEAR_PERI_REG_MASK
(
SPI_USER
(
spi_no
),
SPI_FLASH_MODE
|
SPI_USR_MISO
|
SPI_USR_ADDR
|
SPI_USR_COMMAND
|
SPI_USR_DUMMY
);
SPI_USR_ADDR
|
SPI_USR_COMMAND
|
SPI_USR_DUMMY
);
//clear D
a
ul or Quad lines transmission mode
//clear Du
a
l or Quad lines transmission mode
CLEAR_PERI_REG_MASK
(
SPI_CTRL
(
spi_no
),
SPI_QIO_MODE
|
SPI_DIO_MODE
|
SPI_DOUT_MODE
|
SPI_QOUT_MODE
);
CLEAR_PERI_REG_MASK
(
SPI_CTRL
(
spi_no
),
SPI_QIO_MODE
|
SPI_DIO_MODE
|
SPI_DOUT_MODE
|
SPI_QOUT_MODE
);
// SPI clock = CPU clock / clock_div
// SPI clock = CPU clock / clock_div
...
@@ -208,6 +208,57 @@ void spi_mast_set_mosi(uint8 spi_no, uint8 offset, uint8 bitlen, uint32 data)
...
@@ -208,6 +208,57 @@ void spi_mast_set_mosi(uint8 spi_no, uint8 offset, uint8 bitlen, uint32 data)
}
while
(
bitlen
>
0
);
}
while
(
bitlen
>
0
);
}
}
/******************************************************************************
* FunctionName : spi_mast_get_miso
* Description : Retrieve data from MISO buffer.
* The data is regarded as a sequence of bits with length 'bitlen'.
* It will be read starting left-aligned from position 'offset'.
* Parameters : uint8 spi_no - SPI module number, Only "SPI" and "HSPI" are valid
* uint8 offset - offset into MISO buffer (number of bits)
* uint8 bitlen - requested number of bits in data
*******************************************************************************/
uint32
spi_mast_get_miso
(
uint8
spi_no
,
uint8
offset
,
uint8
bitlen
)
{
uint8
wn
,
wn_offset
,
wn_bitlen
;
uint32
wn_data
=
0
;
if
(
spi_no
>
1
)
return
0
;
// handle invalid input number
// determine which SPI_Wn register is addressed
wn
=
offset
>>
5
;
if
(
wn
>
15
)
return
0
;
// out of range
wn_offset
=
offset
&
0x1f
;
if
(
bitlen
>
(
32
-
wn_offset
))
{
// splitting required
wn_bitlen
=
32
-
wn_offset
;
}
else
{
wn_bitlen
=
bitlen
;
}
do
{
wn_data
|=
(
READ_PERI_REG
(
REG_SPI_BASE
(
spi_no
)
+
0x40
+
wn
*
4
)
>>
(
32
-
(
wn_offset
+
wn_bitlen
)))
&
(
BIT
(
wn_bitlen
)
-
1
);
// prepare reading of dangling data part
wn_data
<<=
bitlen
-
wn_bitlen
;
wn
+=
1
;
wn_offset
=
0
;
if
(
wn
<=
15
)
bitlen
-=
wn_bitlen
;
else
bitlen
=
0
;
// force abort
wn_bitlen
=
bitlen
;
}
while
(
bitlen
>
0
);
return
wn_data
;
}
/******************************************************************************
/******************************************************************************
* FunctionName : spi_mast_transaction
* FunctionName : spi_mast_transaction
* Description : Start a transaction and wait for completion.
* Description : Start a transaction and wait for completion.
...
...
app/include/driver/spi.h
View file @
f2386737
...
@@ -18,11 +18,12 @@ void spi_lcd_mode_init(uint8 spi_no);
...
@@ -18,11 +18,12 @@ void spi_lcd_mode_init(uint8 spi_no);
void
spi_lcd_9bit_write
(
uint8
spi_no
,
uint8
high_bit
,
uint8
low_8bit
);
void
spi_lcd_9bit_write
(
uint8
spi_no
,
uint8
high_bit
,
uint8
low_8bit
);
//spi master init funtion
//spi master init funtion
void
spi_master_init
(
uint8
spi_no
,
unsigned
cpol
,
unsigned
cpha
,
unsigned
databits
,
uint32_t
clock_div
);
void
spi_master_init
(
uint8
spi_no
,
unsigned
cpol
,
unsigned
cpha
,
uint32_t
clock_div
);
//use spi send 8bit data
//use spi send 8bit data
void
spi_mast_byte_write
(
uint8
spi_no
,
uint8
*
data
);
void
spi_mast_byte_write
(
uint8
spi_no
,
uint8
*
data
);
void
spi_set_mosi
(
uint8
spi_no
,
uint8
offset
,
uint8
bitlen
,
uint32
data
);
void
spi_set_mosi
(
uint8
spi_no
,
uint8
offset
,
uint8
bitlen
,
uint32
data
);
uint32
spi_get_miso
(
uint8
spi_no
,
uint8
offset
,
uint8
bitlen
);
void
spi_mast_transaction
(
uint8
spi_no
,
uint8
cmd_bitlen
,
uint16
cmd_data
,
uint8
addr_bitlen
,
uint32
addr_data
,
void
spi_mast_transaction
(
uint8
spi_no
,
uint8
cmd_bitlen
,
uint16
cmd_data
,
uint8
addr_bitlen
,
uint32
addr_data
,
uint8
mosi_bitlen
,
uint8
dummy_bitlen
,
uint8
miso_bitlen
);
uint8
mosi_bitlen
,
uint8
dummy_bitlen
,
uint8
miso_bitlen
);
...
...
app/modules/spi.c
View file @
f2386737
...
@@ -7,15 +7,14 @@
...
@@ -7,15 +7,14 @@
#include "auxmods.h"
#include "auxmods.h"
#include "lrotable.h"
#include "lrotable.h"
// Lua: = spi.setup( id, mode, cpol, cpha,
databits,
clock_div )
// Lua: = spi.setup( id, mode, cpol, cpha, clock_div )
static
int
spi_setup
(
lua_State
*
L
)
static
int
spi_setup
(
lua_State
*
L
)
{
{
unsigned
id
=
luaL_checkinteger
(
L
,
1
);
int
id
=
luaL_checkinteger
(
L
,
1
);
unsigned
mode
=
luaL_checkinteger
(
L
,
2
);
int
mode
=
luaL_checkinteger
(
L
,
2
);
unsigned
cpol
=
luaL_checkinteger
(
L
,
3
);
int
cpol
=
luaL_checkinteger
(
L
,
3
);
unsigned
cpha
=
luaL_checkinteger
(
L
,
4
);
int
cpha
=
luaL_checkinteger
(
L
,
4
);
unsigned
databits
=
luaL_checkinteger
(
L
,
5
);
u32
clock_div
=
luaL_checkinteger
(
L
,
5
);
uint32_t
clock_div
=
luaL_checkinteger
(
L
,
6
);
MOD_CHECK_ID
(
spi
,
id
);
MOD_CHECK_ID
(
spi
,
id
);
...
@@ -31,114 +30,82 @@ static int spi_setup( lua_State *L )
...
@@ -31,114 +30,82 @@ static int spi_setup( lua_State *L )
return
luaL_error
(
L
,
"wrong arg type"
);
return
luaL_error
(
L
,
"wrong arg type"
);
}
}
if
(
databits
!=
PLATFORM_SPI_DATABITS_8
&&
databits
!=
PLATFORM_SPI_DATABITS_16
)
{
return
luaL_error
(
L
,
"wrong arg type"
);
}
if
(
clock_div
<
4
)
{
if
(
clock_div
<
4
)
{
return
luaL_error
(
L
,
"invalid clock divider"
);
return
luaL_error
(
L
,
"invalid clock divider"
);
}
}
u32
res
=
platform_spi_setup
(
id
,
mode
,
cpol
,
cpha
,
databits
,
clock_div
);
u32
res
=
platform_spi_setup
(
id
,
mode
,
cpol
,
cpha
,
clock_div
);
lua_pushinteger
(
L
,
res
);
lua_pushinteger
(
L
,
res
);
return
1
;
return
1
;
}
}
// Lua: wrote = spi.send( id, data1, [data2], ..., [datan] )
// Lua: wrote = spi.send( id,
bitlen,
data1, [data2], ..., [datan] )
// data can be either a string, a table or an 8-bit number
// data can be either a string, a table or an 8-bit number
static
int
spi_send
(
lua_State
*
L
)
static
int
spi_send
(
lua_State
*
L
)
{
{
unsigned
id
=
luaL_checkinteger
(
L
,
1
);
int
id
=
luaL_checkinteger
(
L
,
1
);
const
char
*
pdata
;
int
bitlen
=
luaL_checkinteger
(
L
,
2
)
;
size_t
datalen
,
i
;
size_t
i
;
int
numdata
;
u32
numdata
;
u32
wrote
=
0
;
u32
wrote
=
0
;
unsigned
argn
;
int
argn
;
MOD_CHECK_ID
(
spi
,
id
);
MOD_CHECK_ID
(
spi
,
id
);
if
(
lua_gettop
(
L
)
<
2
)
if
(
lua_gettop
(
L
)
<
3
)
{
return
luaL_error
(
L
,
"too few args"
);
return
luaL_error
(
L
,
"too few args"
);
}
for
(
argn
=
2
;
argn
<=
lua_gettop
(
L
);
argn
++
)
for
(
argn
=
3
;
argn
<=
lua_gettop
(
L
);
argn
++
)
{
{
// lua_isnumber() would silently convert a string of digits to an integer
numdata
=
(
u32
)
luaL_checkinteger
(
L
,
argn
);
// whereas here strings are handled separately.
if
(
PLATFORM_OK
!=
platform_spi_transaction
(
id
,
0
,
0
,
bitlen
,
numdata
,
0
,
0
,
0
))
{
if
(
lua_type
(
L
,
argn
)
==
LUA_TNUMBER
)
return
luaL_error
(
L
,
"failed"
);
{
numdata
=
(
int
)
luaL_checkinteger
(
L
,
argn
);
if
(
numdata
<
0
||
numdata
>
255
)
return
luaL_error
(
L
,
"wrong arg range"
);
platform_spi_transaction
(
id
,
8
,
numdata
,
0
,
0
,
0
,
0
,
0
);
wrote
++
;
}
else
if
(
lua_istable
(
L
,
argn
)
)
{
datalen
=
lua_objlen
(
L
,
argn
);
for
(
i
=
0
;
i
<
datalen
;
i
++
)
{
lua_rawgeti
(
L
,
argn
,
i
+
1
);
numdata
=
(
int
)
luaL_checkinteger
(
L
,
-
1
);
lua_pop
(
L
,
1
);
if
(
numdata
<
0
||
numdata
>
255
)
return
luaL_error
(
L
,
"wrong arg range"
);
platform_spi_transaction
(
id
,
8
,
numdata
,
0
,
0
,
0
,
0
,
0
);
}
wrote
+=
i
;
if
(
i
<
datalen
)
break
;
}
else
{
pdata
=
luaL_checklstring
(
L
,
argn
,
&
datalen
);
for
(
i
=
0
;
i
<
datalen
;
i
++
)
platform_spi_transaction
(
id
,
8
,
pdata
[
i
],
0
,
0
,
0
,
0
,
0
);
wrote
+=
i
;
if
(
i
<
datalen
)
break
;
}
}
wrote
++
;
}
}
lua_pushinteger
(
L
,
wrote
);
lua_pushinteger
(
L
,
wrote
);
return
1
;
return
1
;
}
}
// Lua: read = spi.recv( id,
size
)
// Lua: read = spi.recv( id,
bitlen, num
)
static
int
spi_recv
(
lua_State
*
L
)
static
int
spi_recv
(
lua_State
*
L
)
{
{
unsigned
id
=
luaL_checkinteger
(
L
,
1
);
int
id
=
luaL_checkinteger
(
L
,
1
);
u32
size
=
(
u32
)
luaL_checkinteger
(
L
,
2
),
i
;
int
bitlen
=
luaL_checkinteger
(
L
,
2
);
int
num
=
luaL_checkinteger
(
L
,
3
),
i
;
luaL_Buffer
b
;
spi_data_type
data
;
MOD_CHECK_ID
(
spi
,
id
);
MOD_CHECK_ID
(
spi
,
id
);
if
(
size
==
0
)
{
if
(
bitlen
<
1
||
bitlen
>
32
)
{
return
0
;
return
luaL_error
(
L
,
"bitlen out of range"
)
;
}
}
if
(
num
<
0
)
num
=
0
;
luaL_buffinit
(
L
,
&
b
);
for
(
i
=
0
;
i
<
num
;
i
++
)
for
(
i
=
0
;
i
<
size
;
i
++
)
{
{
data
=
platform_spi_send_recv
(
id
,
0xFF
);
if
(
PLATFORM_OK
!=
platform_spi_transaction
(
id
,
0
,
0
,
0
,
0
,
0
,
0
,
bitlen
))
{
luaL_addchar
(
&
b
,
(
char
)
data
);
return
luaL_error
(
L
,
"failed"
);
}
lua_pushinteger
(
L
,
platform_spi_get_miso
(
id
,
0
,
bitlen
)
);
}
}
luaL_pushresult
(
&
b
);
return
num
;
return
1
;
}
}
// Lua: spi.set_mosi( id, offset, bitlen, data1, [data2], ..., [datan] )
// Lua: spi.set_mosi( id, offset, bitlen, data1, [data2], ..., [datan] )
static
int
spi_set_mosi
(
lua_State
*
L
)
static
int
spi_set_mosi
(
lua_State
*
L
)
{
{
unsigned
id
=
luaL_checkinteger
(
L
,
1
);
int
id
=
luaL_checkinteger
(
L
,
1
);
unsigned
offset
=
luaL_checkinteger
(
L
,
2
);
int
offset
=
luaL_checkinteger
(
L
,
2
);
unsigned
bitlen
=
luaL_checkinteger
(
L
,
3
);
int
bitlen
=
luaL_checkinteger
(
L
,
3
);
unsigned
argn
;
int
argn
;
MOD_CHECK_ID
(
spi
,
id
);
MOD_CHECK_ID
(
spi
,
id
);
if
(
offset
<
0
||
offset
>
511
)
{
if
(
offset
<
0
||
offset
>
511
)
{
return
luaL_error
(
L
,
"offset out of range"
);
return
luaL_error
(
L
,
"offset out of range"
);
}
}
if
(
bitlen
<
1
||
bitlen
>
32
)
{
if
(
bitlen
<
1
||
bitlen
>
32
)
{
return
luaL_error
(
L
,
"bitlen out of range"
);
return
luaL_error
(
L
,
"bitlen out of range"
);
}
}
...
@@ -149,51 +116,87 @@ static int spi_set_mosi( lua_State *L )
...
@@ -149,51 +116,87 @@ static int spi_set_mosi( lua_State *L )
for
(
argn
=
4
;
argn
<=
lua_gettop
(
L
);
argn
++
,
offset
+=
bitlen
)
for
(
argn
=
4
;
argn
<=
lua_gettop
(
L
);
argn
++
,
offset
+=
bitlen
)
{
{
u32
data
=
luaL_checkinteger
(
L
,
argn
);
u32
data
=
(
u32
)
luaL_checkinteger
(
L
,
argn
);
if
(
offset
+
bitlen
>
512
)
if
(
offset
+
bitlen
>
512
)
{
return
luaL_error
(
L
,
"data range exceeded > 512 bits"
);
return
luaL_error
(
L
,
"data range exceeded > 512 bits"
);
}
if
(
platform_spi_set_mosi
(
id
,
offset
,
bitlen
,
data
)
!=
PLATFORM_OK
)
if
(
PLATFORM_OK
!=
platform_spi_set_mosi
(
id
,
offset
,
bitlen
,
data
)
)
{
return
luaL_error
(
L
,
"failed"
);
return
luaL_error
(
L
,
"failed"
);
}
}
}
return
0
;
return
0
;
}
}
// Lua: data = spi.get_miso( id, offset, bitlen, num )
static
int
spi_get_miso
(
lua_State
*
L
)
{
int
id
=
luaL_checkinteger
(
L
,
1
);
int
offset
=
luaL_checkinteger
(
L
,
2
);
int
bitlen
=
luaL_checkinteger
(
L
,
3
);
int
num
=
luaL_checkinteger
(
L
,
4
),
i
;
MOD_CHECK_ID
(
spi
,
id
);
if
(
offset
<
0
||
offset
>
511
)
{
return
luaL_error
(
L
,
"out of range"
);
}
if
(
bitlen
<
1
||
bitlen
>
32
)
{
return
luaL_error
(
L
,
"bitlen out of range"
);
}
if
(
offset
+
bitlen
*
num
>
512
)
{
return
luaL_error
(
L
,
"out of range"
);
}
for
(
i
=
0
;
i
<
num
;
i
++
)
{
lua_pushinteger
(
L
,
platform_spi_get_miso
(
id
,
offset
+
(
bitlen
*
i
),
bitlen
)
);
}
return
num
;
}
// Lua: spi.transaction( id, cmd_bitlen, cmd_data, addr_bitlen, addr_data, mosi_bitlen, dummy_bitlen, miso_bitlen )
// Lua: spi.transaction( id, cmd_bitlen, cmd_data, addr_bitlen, addr_data, mosi_bitlen, dummy_bitlen, miso_bitlen )
static
int
spi_transaction
(
lua_State
*
L
)
static
int
spi_transaction
(
lua_State
*
L
)
{
{
unsigned
id
=
luaL_checkinteger
(
L
,
1
);
int
id
=
luaL_checkinteger
(
L
,
1
);
unsigned
cmd_bitlen
=
luaL_checkinteger
(
L
,
2
);
int
cmd_bitlen
=
luaL_checkinteger
(
L
,
2
);
u
32
cmd_data
=
luaL_checkinteger
(
L
,
3
);
u
16
cmd_data
=
(
u16
)
luaL_checkinteger
(
L
,
3
);
unsigned
addr_bitlen
=
luaL_checkinteger
(
L
,
4
);
int
addr_bitlen
=
luaL_checkinteger
(
L
,
4
);
u32
addr_data
=
luaL_checkinteger
(
L
,
5
);
u32
addr_data
=
(
u32
)
luaL_checkinteger
(
L
,
5
);
unsigned
mosi_bitlen
=
luaL_checkinteger
(
L
,
6
);
int
mosi_bitlen
=
luaL_checkinteger
(
L
,
6
);
unsigned
dummy_bitlen
=
luaL_checkinteger
(
L
,
7
);
int
dummy_bitlen
=
luaL_checkinteger
(
L
,
7
);
unsigned
miso_bitlen
=
luaL_checkinteger
(
L
,
8
);
int
miso_bitlen
=
luaL_checkinteger
(
L
,
8
);
MOD_CHECK_ID
(
spi
,
id
);
MOD_CHECK_ID
(
spi
,
id
);
if
(
cmd_bitlen
<
0
||
cmd_bitlen
>
16
)
{
if
(
cmd_bitlen
<
0
||
cmd_bitlen
>
16
)
{
return
luaL_error
(
L
,
"cmd_bitlen out of range"
);
return
luaL_error
(
L
,
"cmd_bitlen out of range"
);
}
}
if
(
addr_bitlen
<
0
||
addr_bitlen
>
32
)
{
if
(
addr_bitlen
<
0
||
addr_bitlen
>
32
)
{
return
luaL_error
(
L
,
"addr_bitlen out of range"
);
return
luaL_error
(
L
,
"addr_bitlen out of range"
);
}
}
if
(
mosi_bitlen
<
0
||
mosi_bitlen
>
512
)
{
if
(
mosi_bitlen
<
0
||
mosi_bitlen
>
512
)
{
return
luaL_error
(
L
,
"mosi_bitlen out of range"
);
return
luaL_error
(
L
,
"mosi_bitlen out of range"
);
}
}
if
(
dummy_bitlen
<
0
||
dummy_bitlen
>
256
)
{
if
(
dummy_bitlen
<
0
||
dummy_bitlen
>
256
)
{
return
luaL_error
(
L
,
"dummy_bitlen out of range"
);
return
luaL_error
(
L
,
"dummy_bitlen out of range"
);
}
}
if
(
miso_bitlen
<
0
||
miso_bitlen
>
511
)
{
if
(
miso_bitlen
<
0
||
miso_bitlen
>
511
)
{
return
luaL_error
(
L
,
"miso_bitlen out of range"
);
return
luaL_error
(
L
,
"miso_bitlen out of range"
);
}
}
if
(
platform_spi_transaction
(
id
,
cmd_bitlen
,
cmd_data
,
addr_bitlen
,
addr_data
,
if
(
PLATFORM_OK
!=
platform_spi_transaction
(
id
,
cmd_bitlen
,
cmd_data
,
addr_bitlen
,
addr_data
,
mosi_bitlen
,
dummy_bitlen
,
miso_bitlen
)
!=
PLATFORM_OK
)
mosi_bitlen
,
dummy_bitlen
,
miso_bitlen
)
)
{
return
luaL_error
(
L
,
"failed"
);
return
luaL_error
(
L
,
"failed"
);
}
return
0
;
return
0
;
}
}
...
@@ -208,6 +211,7 @@ const LUA_REG_TYPE spi_map[] =
...
@@ -208,6 +211,7 @@ const LUA_REG_TYPE spi_map[] =
{
LSTRKEY
(
"send"
),
LFUNCVAL
(
spi_send
)
},
{
LSTRKEY
(
"send"
),
LFUNCVAL
(
spi_send
)
},
{
LSTRKEY
(
"recv"
),
LFUNCVAL
(
spi_recv
)
},
{
LSTRKEY
(
"recv"
),
LFUNCVAL
(
spi_recv
)
},
{
LSTRKEY
(
"set_mosi"
),
LFUNCVAL
(
spi_set_mosi
)
},
{
LSTRKEY
(
"set_mosi"
),
LFUNCVAL
(
spi_set_mosi
)
},
{
LSTRKEY
(
"get_miso"
),
LFUNCVAL
(
spi_get_miso
)
},
{
LSTRKEY
(
"transaction"
),
LFUNCVAL
(
spi_transaction
)
},
{
LSTRKEY
(
"transaction"
),
LFUNCVAL
(
spi_transaction
)
},
#if LUA_OPTIMIZE_MEMORY > 0
#if LUA_OPTIMIZE_MEMORY > 0
{
LSTRKEY
(
"MASTER"
),
LNUMVAL
(
PLATFORM_SPI_MASTER
)
},
{
LSTRKEY
(
"MASTER"
),
LNUMVAL
(
PLATFORM_SPI_MASTER
)
},
...
...
app/platform/platform.c
View file @
f2386737
...
@@ -437,9 +437,9 @@ int platform_i2c_recv_byte( unsigned id, int ack ){
...
@@ -437,9 +437,9 @@ int platform_i2c_recv_byte( unsigned id, int ack ){
// *****************************************************************************
// *****************************************************************************
// SPI platform interface
// SPI platform interface
uint32_t
platform_spi_setup
(
unsigned
id
,
int
mode
,
unsigned
cpol
,
unsigned
cpha
,
unsigned
databits
,
uint32_t
clock_div
)
uint32_t
platform_spi_setup
(
unsigned
id
,
int
mode
,
unsigned
cpol
,
unsigned
cpha
,
uint32_t
clock_div
)
{
{
spi_master_init
(
id
,
cpol
,
cpha
,
databits
,
clock_div
);
spi_master_init
(
id
,
cpol
,
cpha
,
clock_div
);
return
1
;
return
1
;
}
}
...
@@ -459,6 +459,14 @@ int platform_spi_set_mosi( uint8_t id, uint8_t offset, uint8_t bitlen, spi_data_
...
@@ -459,6 +459,14 @@ int platform_spi_set_mosi( uint8_t id, uint8_t offset, uint8_t bitlen, spi_data_
return
PLATFORM_OK
;
return
PLATFORM_OK
;
}
}
spi_data_type
platform_spi_get_miso
(
uint8_t
id
,
uint8_t
offset
,
uint8_t
bitlen
)
{
if
(
offset
+
bitlen
>
512
)
return
0
;
return
spi_mast_get_miso
(
id
,
offset
,
bitlen
);
}
int
platform_spi_transaction
(
uint8_t
id
,
uint8_t
cmd_bitlen
,
spi_data_type
cmd_data
,
int
platform_spi_transaction
(
uint8_t
id
,
uint8_t
cmd_bitlen
,
spi_data_type
cmd_data
,
uint8_t
addr_bitlen
,
spi_data_type
addr_data
,
uint8_t
addr_bitlen
,
spi_data_type
addr_data
,
uint8_t
mosi_bitlen
,
uint8_t
dummy_bitlen
,
uint8_t
miso_bitlen
)
uint8_t
mosi_bitlen
,
uint8_t
dummy_bitlen
,
uint8_t
miso_bitlen
)
...
...
app/platform/platform.h
View file @
f2386737
...
@@ -99,11 +99,12 @@ typedef uint32_t spi_data_type;
...
@@ -99,11 +99,12 @@ typedef uint32_t spi_data_type;
// The platform SPI functions
// The platform SPI functions
int
platform_spi_exists
(
unsigned
id
);
int
platform_spi_exists
(
unsigned
id
);
uint32_t
platform_spi_setup
(
unsigned
id
,
int
mode
,
unsigned
cpol
,
unsigned
cpha
,
unsigned
databits
,
uint32_t
clock_div
);
uint32_t
platform_spi_setup
(
unsigned
id
,
int
mode
,
unsigned
cpol
,
unsigned
cpha
,
uint32_t
clock_div
);
spi_data_type
platform_spi_send_recv
(
unsigned
id
,
spi_data_type
data
);
spi_data_type
platform_spi_send_recv
(
unsigned
id
,
spi_data_type
data
);
void
platform_spi_select
(
unsigned
id
,
int
is_select
);
void
platform_spi_select
(
unsigned
id
,
int
is_select
);
int
platform_spi_set_mosi
(
uint8_t
id
,
uint8_t
offset
,
uint8_t
bitlen
,
spi_data_type
data
);
int
platform_spi_set_mosi
(
uint8_t
id
,
uint8_t
offset
,
uint8_t
bitlen
,
spi_data_type
data
);
spi_data_type
platform_spi_get_miso
(
uint8_t
id
,
uint8_t
offset
,
uint8_t
bitlen
);
int
platform_spi_transaction
(
uint8_t
id
,
uint8_t
cmd_bitlen
,
spi_data_type
cmd_data
,
int
platform_spi_transaction
(
uint8_t
id
,
uint8_t
cmd_bitlen
,
spi_data_type
cmd_data
,
uint8_t
addr_bitlen
,
spi_data_type
addr_data
,
uint8_t
addr_bitlen
,
spi_data_type
addr_data
,
uint8_t
mosi_bitlen
,
uint8_t
dummy_bitlen
,
uint8_t
miso_bitlen
);
uint8_t
mosi_bitlen
,
uint8_t
dummy_bitlen
,
uint8_t
miso_bitlen
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment