嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# X$ ~0 H# ]4 @' e% X7 S E* g
Void UPP_TASK(Void)
& |6 [/ n; Z6 `2 X+ X. b
{
* ^6 O# I9 X8 d# K
" h- C* c' S: N6 r- n9 o6 T
int i,j,k,target_int_count=2;
9 I5 g/ S K$ i- h! o
char ch[2];
+ {) A' H x& t n
; {% Y5 h( Q' r! @
* x$ j! s! Q" m5 X# \$ J/ p! w
: x0 b) {9 z1 g8 E2 M# R; t4 c3 S# y
upp_interrupt_count = 0;
" l( A# n$ d n. p* C
upp_error_count = 0;
+ R9 N' c! N1 e. N3 n
% U3 Y4 a8 q) Q2 @
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 B' G' [9 \) N# G3 p( ~
// Initialize data buffers
$ k: i- y _# g5 p
for (i = 0; i < upp_frame_size; i++)
% N- i. s. Y: D- `1 t& Z
{
/ n' o4 v! |! |8 }& E
upp_buffer_b
=i;
& W; o6 k# S7 E2 o$ n
upp_buffer_a
= 0xDEAD;
& [. i3 X; g6 a/ B
}
7 G" A" f5 I$ N( u: ?( A8 U
0 o# ~% z; A$ Q% J# Q
//for(i=0;i<1024;i++)
/ N- L# Y- R8 B- B3 a/ B6 o7 L
// temp
=0;
/ |: s% P, t% y' `' Z
% Y( h4 S: o( C$ @: o0 |8 K5 P
//UPPReset();
# L. a6 _5 x. c, p& j
/*启动UPP DMA传输*/
6 v3 B2 t3 Q8 I" ?+ X# j' \
UARTPuts("upp_prog_dma_i\n",-2);
2 S" I0 b% M3 P) }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. w( Z- i! O# U5 G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 F8 [' ~' h$ t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 j' x7 s& i1 P, F8 f: J' _2 g
$ r" Q( ?% h- `1 H
UARTPuts("upp_prog_dma_i\n",-2);
3 ^4 r% s+ t" }6 @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# \' a- R7 X5 P; n9 r. [, ?+ m6 v
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- v0 h3 o3 |- j5 C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 Y9 K0 V6 j4 p0 X3 b
. ] i0 z) U7 o( Y
/*等待UPP传输完毕*/
0 H; E: J3 C+ _1 x8 T
//i=0;
) D6 W0 v) [- j" L
//j=0;
/ v4 B7 }9 n H, h9 o6 c. ^9 p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 X9 i2 |5 X9 @. ]( i5 C( |
{
+ r* ?* E6 O1 h' ?0 a
/* 测试UPP传输的同时操作普通DDR数据
! t6 ~1 v9 p- c1 v
temp
=i;
/ s5 s. D% K2 U' `/ o0 D
i++;
" A' Q0 ^2 ~. k. z, A
if(i==1024)
$ q7 R% R4 u4 [) L
{
; H0 ]/ S s) T. q% w8 d! J
i=0;
. N& s9 H$ ~: q$ j3 i' O: `5 b5 _" d
j++;
. Z7 b1 |" D2 D$ B/ Z4 \- U
}
9 H( O9 P8 ?+ C: V; _ X1 O
*/
4 w0 h+ m6 P F. a% q
+ l# B2 q5 r, K2 t4 |$ q
asm(" nop");
$ Z6 a. i! e: T7 _& \8 c* C2 E
! j) G3 S) A' b- h4 i) R! z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* E8 W& F9 H# I' E: n i+ T6 e
}
4 u: ?; X/ _6 A. W
: @0 u. n2 k3 z" E" e
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# z0 Z' x0 k7 i# _$ Z
//UARTprintf( "i=%d\n",i);
- X% R2 [8 @; ~7 w7 B, q; i
//UARTprintf( "j=%d\n",j);
" J# I# M! S0 X3 a# x( o9 G
UARTPuts("Data mismatch in buffers.\n",-2);
5 K. z5 W+ t3 u- Z9 m
if (upp_interrupt_count == 2 && upp_error_count == 0)
. s9 t! a2 A+ @! U5 n0 d3 g
{
, M$ } D! v8 Z
for (i = 0; i<upp_frame_size; i++)
6 S" W3 e3 c9 W3 Z: {$ [' t( H
{
! x" T/ C3 F8 @: ?
if (upp_buffer_a
!= upp_buffer_b
)
% {- e/ t, e- ?0 A9 i0 `' S
{
/ ?$ a% M/ l4 A5 O* q" G, n1 ?
upp_error_count++;
& Q; U+ [* l d% ^( A2 v
}
0 B+ L7 n {8 `$ R4 N3 p
}
/ C6 _% h6 \/ F5 v) X8 R* T
}
) k3 `! b; U3 f) n; {0 X; A
! J7 q/ J+ D% Z0 ~, w* x9 u, }
/* 报告通信结果*/
( q' b' w( r3 f+ v, h
if(upp_error_count != 0)
# D U; ~* A& P2 S9 u4 T% Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: @6 C6 n. t# Q, j/ L7 B
else
+ @4 f1 L: V4 y9 z: J6 l
UARTPuts("uPP transfers complete!\n",-2);
8 G' i8 u' B& s# n! R2 d
/ u5 V" N$ b5 L5 R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 ~* Q1 d/ S2 w- A5 W9 g4 Z5 Q; C
UARTGets(ch,2);
$ a0 I3 \% i) O( H' z
UARTPuts("\n", -2);
! q& g7 b7 a) P+ B+ a% s! f
" R; u6 [, _8 X c
if(ch[0] == 'y')
+ \8 ~! g" o$ J1 |
{
( \, w/ q5 p5 M- D9 D
/*打印全部读到的数据*/
2 x) x0 N$ T6 D; B/ |
for(i=0; i<upp_frame_size; )
P1 E- ^7 ^( m4 r# g: u
{
7 A7 d; w7 q- [4 B T
for(j=0; j<5; j++)
9 z( a/ H* I$ p# t
{
$ r8 T# \. v! M5 j/ K# ^) H( n7 b
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 N% n! X0 V6 S& K0 u X3 _8 i
i++;
/ I- Y. Q7 U1 U
//if(i >= 4096)
. |9 t9 v3 u6 }) T$ D" C4 P. ^
// break;
! o7 ]) H& R7 F) B2 K
2 ]$ d& x) h6 r% @1 \% X0 O
}
3 G4 A% A3 F3 \
UARTPuts("\n",-2);
. j9 r$ C, S6 e# F+ {
}
& T; g3 r J, p% P
}
. f1 h$ V- `- m5 x" f" P9 l
4 `8 A* U* `4 f O e* a
}
4 C: [( W7 U5 p
) V$ _: i5 ]" A
O7 I, A6 \8 v1 M
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 ~8 O5 u- A) U1 w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 k H8 x6 g! _: ^6 C
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4