aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorAhmed BOUDJELIDA <aboudjelida@nanoxplore.com>2023-10-16 11:04:16 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2023-11-18 11:24:02 +0000
commita69a4e23f4630fb21daea6f8264881c0546e340b (patch)
tree97e21460374b1d8a9ecaf63977717b2f90176d29 /contrib
parent8bf7f603ae8c441c7734c9dcdc5ee2805a620fb4 (diff)
downloadriscv-openocd-a69a4e23f4630fb21daea6f8264881c0546e340b.zip
riscv-openocd-a69a4e23f4630fb21daea6f8264881c0546e340b.tar.gz
riscv-openocd-a69a4e23f4630fb21daea6f8264881c0546e340b.tar.bz2
contrib/firmware: extend the number of bytes to be sent in the i2c bit-banging read operation
Change-Id: Iaeb3d5ba37da1bd77d36ad0ebbc6b45c46860dec Signed-off-by: Ahmed BOUDJELIDA <aboudjelida@nanoxplore.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7810 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'contrib')
-rw-r--r--contrib/firmware/angie/c/src/usb.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/contrib/firmware/angie/c/src/usb.c b/contrib/firmware/angie/c/src/usb.c
index e284efd..0a43ff9 100644
--- a/contrib/firmware/angie/c/src/usb.c
+++ b/contrib/firmware/angie/c/src/usb.c
@@ -757,14 +757,13 @@ void i2c_recieve(void)
PIN_SDA_DIR = 0;
if (EP6FIFOBUF[0] == 1) {
uint8_t rdwr = EP6FIFOBUF[0]; //read
- uint8_t reg_adr_check = EP6FIFOBUF[1];
- uint8_t count = EP6FIFOBUF[2]; //request data count
+ uint8_t data_count = EP6FIFOBUF[1]; //data sent count
+ uint8_t count = EP6FIFOBUF[2]; //requested data count
uint8_t adr = EP6FIFOBUF[3]; //address
- uint8_t reg_adr = EP6FIFOBUF[4];
uint8_t address = get_address(adr, rdwr); //address byte (read command)
uint8_t address_2 = get_address(adr, 0); //address byte 2 (write command)
- printf("%d\n", address);
+ printf("%d\n", address - 1);
/* start: */
start_cd();
@@ -774,10 +773,12 @@ void i2c_recieve(void)
uint8_t ack = get_ack();
/* send data */
- if (reg_adr_check) { //if there is a byte reg
- send_byte(reg_adr);
- /* ack(): */
- ack = get_ack();
+ if (data_count) { //if there is a byte reg
+ for (uint8_t i = 0; i < data_count; i++) {
+ send_byte(EP6FIFOBUF[i + 4]);
+ /* ack(): */
+ ack = get_ack();
+ }
}
/* repeated start: */
@@ -788,13 +789,15 @@ void i2c_recieve(void)
ack = get_ack();
/* receive data */
- for (uint8_t i = 0; i < count; i++) {
+ for (uint8_t i = 0; i < count - 1; i++) {
EP8FIFOBUF[i] = receive_byte();
- /* send ack: */
+ /* send ack: */
send_ack();
}
+ EP8FIFOBUF[count - 1] = receive_byte();
+
/* stop */
stop_cd();