嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
q) g K) }' K) b) `4 C% U/ f
Void UPP_TASK(Void)
: N; d6 h u& y2 d
{
7 _1 z+ O1 v; [& P5 I4 H* i) |, {$ R
0 Z' a( \5 [1 e' K4 `+ T
int i,j,k,target_int_count=2;
y2 y3 ^" ~! [
char ch[2];
* o% D+ K+ ~6 b* {( j
4 d% R/ v2 f$ l$ P2 I. d
3 `$ L" `2 `. p6 m2 x7 u
4 M. g2 q$ E# T% Y
upp_interrupt_count = 0;
7 ~% V, ?/ d8 `& R4 O
upp_error_count = 0;
0 G# T* n' Q" ]: H/ v# U
1 m h- p$ A# u! E1 z6 d8 L
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; Q8 P8 A9 C' y9 r
// Initialize data buffers
+ Z: M; B* ]8 @% o) W
for (i = 0; i < upp_frame_size; i++)
! q3 t/ v; F8 i, R J8 z0 |
{
4 J% r9 n8 L/ ]/ o& t' @$ |& t
upp_buffer_b
=i;
1 R$ u! @0 t- Q( f
upp_buffer_a
= 0xDEAD;
8 f7 W {& R/ s% r
}
$ r( Y b( T4 K$ H, a2 G
- J I F) u# D4 b# d% a9 o& ~
//for(i=0;i<1024;i++)
) ^; `% j) v& X+ u
// temp
=0;
; q" b% Z' Y" c: P$ d1 G- t/ p
$ q e% j& s3 a3 G; t
//UPPReset();
" n% O1 s1 Q6 {- A9 U
/*启动UPP DMA传输*/
( } O! c& m' j2 g6 O+ q2 E" C* F
UARTPuts("upp_prog_dma_i\n",-2);
3 P+ Y: _6 Y$ m9 e4 ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 }5 Q- K/ c* ~/ E* K# U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' _3 ~1 V1 g. T. b% b* w" R; ^7 N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 g) s7 D3 D2 m r8 b) s/ {, B
$ p: L$ p! {' @% S$ A6 {/ |
UARTPuts("upp_prog_dma_i\n",-2);
X; J+ n, y$ T, ^% U+ q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
E' s5 u: W, u+ i* B1 t1 K( }
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
}1 D" ~( D, b
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 i0 `/ ~% k4 Y3 R0 z) V
0 k# |( ~/ J, x0 q4 S1 ^, ]- N( W' {
/*等待UPP传输完毕*/
8 n8 R9 A4 Y- d* n8 p
//i=0;
8 q5 U0 @* p, j7 e
//j=0;
, w0 ]+ n& X: E0 b; e& e! N$ U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 A7 F, d7 s" o+ o/ V
{
" |! V/ ?+ _) T- `3 A& ?
/* 测试UPP传输的同时操作普通DDR数据
; ]; K9 \, F/ K* q' N
temp
=i;
! n* v+ e9 O" c" I
i++;
% q( _% d! C! J" Y
if(i==1024)
$ x6 N2 H/ f+ `! _- z, ?' d
{
% c; c( ~0 w; P$ T( W+ t3 w
i=0;
8 ]) Q4 J" y" C% S% K* v
j++;
4 C; |8 @ \1 G5 }& G0 Y8 n @8 ]
}
+ v$ e" w7 Y* s- v+ A$ b8 I! v
*/
. T1 F* [7 _8 o8 J- z
* C9 E' A( P9 D+ {
asm(" nop");
: o. D8 x* `: o! b2 x7 O* l
4 N) k h8 b% V5 u( O5 P3 o8 }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 K' ~) A7 t3 P* e3 v2 T' o
}
8 \5 v" e; H7 V& B$ R3 @& {
/ _9 s7 A, d y4 C& @
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ c& k- v( Q( b, d4 F" Y V0 s
//UARTprintf( "i=%d\n",i);
+ A' [; |. f) s. h. T4 O- P
//UARTprintf( "j=%d\n",j);
& l1 u {; W# q, W7 y3 y
UARTPuts("Data mismatch in buffers.\n",-2);
$ c/ ]5 @! r4 d) L7 q
if (upp_interrupt_count == 2 && upp_error_count == 0)
. E5 N4 B' k% l1 q, |9 g
{
2 f$ @& c; g) `7 h
for (i = 0; i<upp_frame_size; i++)
0 u+ o5 V+ x7 b/ W s, A
{
6 o/ u- r! l9 `$ n# g! [/ F' C' [+ |% y
if (upp_buffer_a
!= upp_buffer_b
)
# I# x8 o) M8 p3 ]& o* W2 t
{
C# F0 q" J ~- k
upp_error_count++;
- w4 n; w2 [- [$ f% c3 G6 Y
}
7 D4 l$ ?) l; f! M# H, i% G, x
}
* a- {( Z9 n/ c8 H2 ]
}
5 S9 |. E, g9 z6 l
/ R4 {( n! b, f& }4 I
/* 报告通信结果*/
) _5 g$ ~# w; P3 U. M
if(upp_error_count != 0)
" r( \) r2 R2 h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 h/ V6 ~' L4 _$ k6 y; m- m
else
6 t, u3 p" K- V; R5 m$ k
UARTPuts("uPP transfers complete!\n",-2);
6 e3 P; R/ a. s0 s1 u) `" a
. D' d1 L9 @4 O* @% R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 I/ C7 R. s5 q6 D2 R8 ]
UARTGets(ch,2);
/ K" M c2 n# C7 |1 C: Z: q9 D
UARTPuts("\n", -2);
4 b" O4 Q4 J5 R: m2 o0 M
, r! K/ i$ J& q
if(ch[0] == 'y')
( B% B: L6 x j9 z# v! u' e
{
& u( c& N2 }! ^0 }; [
/*打印全部读到的数据*/
6 M4 q2 o7 Y9 P7 G- ^
for(i=0; i<upp_frame_size; )
5 |# }. v1 k$ S
{
2 o% w) M$ W! d! C9 A
for(j=0; j<5; j++)
: d& l- q2 c6 x) L- \. j, f
{
8 r& {7 \/ _1 q0 V9 K& p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ a, \* O$ C8 @9 e C) m
i++;
8 \* f" s1 Y Y1 t W9 e8 v* P
//if(i >= 4096)
, _: M+ ]1 O6 k$ ~* j
// break;
/ j" ]5 T! Y9 |. p, f8 M" c
0 a) J1 u6 A$ r, B& |1 D9 `2 `7 }
}
# F0 {* _8 A7 R/ a
UARTPuts("\n",-2);
# Q+ T/ c& F+ w: b
}
( f- ~1 H% p" W( ]5 e
}
- [6 h$ h! D: T1 @& V) T7 N* F
5 [6 {2 z& ]& N1 ?) S& p
}
$ l" C% L! T6 h; G. T& m, W
# V* I# J8 g, ]
1 y8 u4 W7 A9 q" x* {
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 _1 N5 I6 K. E* n0 u7 {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( H* H f9 J* |3 h# H
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4