嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 K+ H; ]* R) N; ~9 w# v |' o
Void UPP_TASK(Void)
# g! R. c4 n4 z
{
2 s4 k3 e+ a& K
' h, l6 l" S$ Y( a, H
int i,j,k,target_int_count=2;
8 c9 ]9 v3 H: X' S# q
char ch[2];
$ }' S [. V$ m$ V, w$ @5 g, n' z8 e
/ u. n5 u- Q6 y+ ]$ p& M
# N# k1 n p8 h2 \
# D0 t, C2 y: w+ V6 R# [
upp_interrupt_count = 0;
u% Z @) P/ L4 y- Y Y
upp_error_count = 0;
" B3 ~/ m9 n+ J4 T& g
$ d9 W- \+ u5 ]7 F0 O: [& J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 a7 H, `7 M! B1 |1 E! H7 D" r2 L
// Initialize data buffers
v4 @7 l9 S6 }) u: A3 R S
for (i = 0; i < upp_frame_size; i++)
6 @/ {8 u( W$ v8 X/ | k
{
/ }2 @ A$ Q; z, H
upp_buffer_b
=i;
: C' c* z! |7 C4 l/ \$ D
upp_buffer_a
= 0xDEAD;
4 L3 x+ F& p3 v$ ^- V+ A, b
}
/ _' b9 I$ Y1 j5 y" p
, j9 A5 K' M* {& m
//for(i=0;i<1024;i++)
- R& M+ }& D1 L, `' D- R0 f+ e$ w
// temp
=0;
% Y( d9 y8 I, J" G8 U; J+ n0 x
; }0 A: B9 D4 m
//UPPReset();
/ C8 \% w ]8 z* w3 t
/*启动UPP DMA传输*/
1 ~# [; b @, {6 i5 {; c
UARTPuts("upp_prog_dma_i\n",-2);
/ s' Y( T( e. d& I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 S+ m: g, d6 Q" S& Q: ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; s/ _% G0 `) }3 z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 P$ I. c: A- F4 G/ T* {
. k( p! O0 d; J0 u! k
UARTPuts("upp_prog_dma_i\n",-2);
/ S4 V/ }. d3 O" }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 s1 j% v- ? G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 K! L Z4 }- J% O# \; A) t4 ~( e5 T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 D0 j* J( T6 S$ f- ^( u
& H4 d$ C' f8 {: a
/*等待UPP传输完毕*/
- Q7 P2 H9 E2 l: k' u1 `% e0 z
//i=0;
; q w5 K) A. p0 b- b; J" F4 \
//j=0;
2 N( v; i& a) v; H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ p3 d2 @2 v) t
{
/ c2 Y8 K4 ?2 e$ u5 G
/* 测试UPP传输的同时操作普通DDR数据
3 o3 M, c- Z, w W+ _7 A
temp
=i;
6 g8 k* H% d" I# M9 c
i++;
0 r. j) n" u$ k$ {; Z
if(i==1024)
5 o# S+ p4 z c. ~
{
, n) f: @* P* ]2 X2 n/ n
i=0;
. f" U$ ^5 }8 `- ^+ C% M
j++;
4 o& @* t2 w3 r; @
}
( L1 V1 P) t" B7 t+ c
*/
8 |' K, X, n5 V Q! F
# L1 P X6 C- p6 z) @) S& s
asm(" nop");
+ |/ S' i- j$ d; i/ f4 {; F
6 g" c* x1 N' V, K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ |$ W# _$ g t* N" X& t K
}
- K( j# |+ v# U: Q9 v
- y8 d2 B3 z* o8 u- G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: [6 j' h; v& x" G
//UARTprintf( "i=%d\n",i);
6 U* ^- i- R8 S& `* D+ F
//UARTprintf( "j=%d\n",j);
( M9 D" S4 O% \( M
UARTPuts("Data mismatch in buffers.\n",-2);
, O! Y4 I1 m3 r
if (upp_interrupt_count == 2 && upp_error_count == 0)
& `5 L) w% q) x0 W( J. R
{
% c4 X6 W: S7 L1 L, v7 `& x5 _
for (i = 0; i<upp_frame_size; i++)
' e) y! i" W5 L! l, i3 g# U% A" c
{
) C$ x& n0 o' k
if (upp_buffer_a
!= upp_buffer_b
)
; v2 ^% ?( Z0 T* D: N
{
# \4 V; a5 N5 {5 k
upp_error_count++;
0 o# T4 k0 y8 S
}
% d8 k t/ h+ y% X( o7 b5 n- R# ]- `
}
; {9 ?7 U& ^1 ^3 b+ y& v
}
! m6 x6 d" [2 `8 m& P/ K' k/ n8 P" `. E
@0 J! v" k7 ?, I
/* 报告通信结果*/
! C2 X) a' L( D: b4 N
if(upp_error_count != 0)
' |2 p# @8 H3 P' A7 S" ^( `
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ d( L$ M+ k h$ j. h
else
2 v! j9 |# S6 h0 ^, |9 S
UARTPuts("uPP transfers complete!\n",-2);
F/ u1 W; w3 E }0 x
4 o" w0 E1 j3 I
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! Y4 l/ Z* l2 G- z! _
UARTGets(ch,2);
! q- s/ H* O4 n7 O3 |8 T F- I' J% O
UARTPuts("\n", -2);
* Q$ K: y, A4 N/ x$ r6 w
4 M! r8 W; {" T+ A a8 ~8 f
if(ch[0] == 'y')
' ?( X& w2 K& P8 Z* ?
{
0 E+ c1 c5 l- Q* r: S3 O
/*打印全部读到的数据*/
- n W# @$ T( O o* z# w& @$ x0 D
for(i=0; i<upp_frame_size; )
4 R: ^; B; [6 I. r. N4 @4 j
{
0 e+ p ^( j: r7 g6 `4 a3 o
for(j=0; j<5; j++)
0 D& V2 _7 @+ a
{
, `. S6 R) K9 r2 t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% p' Y/ ]& \# M/ _) |
i++;
) F8 D2 m& H9 k9 B$ X
//if(i >= 4096)
5 }, b1 e) H% X A" O! L
// break;
! p- J2 E* r! Y1 q
2 x- Z1 A8 k5 z$ E0 C/ n& G, L7 n: ]
}
( B) W4 Z4 g4 d2 Q
UARTPuts("\n",-2);
( _0 \$ d% o) G0 `2 l; X
}
9 ]* M ^5 t# Q8 R# `; O, h
}
( A* Y+ y: [5 o
7 N8 N3 _! y7 l6 b' r, p
}
- Y5 e; J; ]' l: l: [4 I
: o/ P0 x; N* @) J- y: J) P
# Q: r- b! E/ r9 }+ m# b6 ?
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! T1 g& d1 x3 m5 ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 _( ^' o/ e: ~. m' d
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4