C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6224|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 W7 t' P. c3 X" j5 U! rmain文件:8 n4 C0 A; ^8 x  ?
interrupt void interrupt4(void)  
' ?& V# S( y$ j* \# `{
% E/ D: N. t* G2 k( P6 F  Uint32 sample;
# f4 x5 v- @; K0 K! d
- T0 C8 Q0 z4 ]' h  sample = input_sample(); // read L + R samples from ADC
) t6 ]; l) c- @' O. c) o  output_sample(sample);   // write L + R samples to DAC + V" p' ?" G+ Q5 p3 N
  return;! X4 U- N" s1 o. q6 A
}
& L& t) m( g2 n7 o- A  {
/ j8 l3 R  C' a- U: wint main( void )& m4 K( t2 d: w/ q  s! M
{
  g) L# g0 f$ q5 J4 b# B9 k8 `- n* }( `. S
    /* Initialize BSL */
; L6 B& H9 _% f6 @    EVMC6747_init( );
. g8 u' U6 b# ~* _; C9 a        /* Call evmc6747_intr function */
6 J! f& w% Y( h: U# d4 \    aic3106_init( );, _8 R* c; \5 t/ Y
        while(1);9 o$ S- @# v+ B* _3 Y- Y
}) Y8 |. i) O3 ^

4 x5 B5 u0 D0 L0 `" X; j' r
' A5 P3 {7 Q" f5 D: j2 t1 Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' c0 D* O- N2 Y$ e. F3 c0 D
/* Initialize MCASP1 */2 r1 s( i0 l8 W$ e" A% V/ e
    mcasp = &MCASP_MODULE_1;
( A5 h# T( o% w    mcasp->regs->GBLCTL  = 0;       // Reset; j# _7 q0 D+ I4 O; g5 z, \
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 L- I1 |+ g* B( {
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ w  u: N5 r4 \; o( o    mcasp->regs->PWRDEMU = 1;       // Free-running% Z" }9 B# t  H
   // configure McASP0 receive registers! S: A3 W" t2 X8 W' i
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: C7 u  u% q; E) I
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( L) N( `. ?- Z' A1 G) g7 f+ \    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# y' h0 E! c& \1 N3 L    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 {: y2 S* x3 e8 C+ S  N, L+ I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ B, w  k% s( P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- }. E  F1 o) M4 L! y6 c5 N
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 Q+ n/ r) i) o8 _  Z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 Y: P4 G7 X5 Y  M

% \: }" U* C! f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ `, @- A* l; h9 D& X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% N/ z+ I7 w' x! B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% |& a* B+ ?. A3 L3 f$ a    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: ?+ U6 B" n! w: `+ B6 a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" G( ~9 g0 ?/ f: K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 k% ]7 D* G. J' a5 m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, {6 e  T2 a# i1 ^; n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( {- i9 S4 W9 P' I0 ]& T; e- A
- A2 E% J6 W' I4 ]' j
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ J. d, K- g' R. ?9 ~    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ ~1 ~4 m# {  w) g) ]
    mcasp->regs->PFUNC      = 0;          // All MCASPs- j* X# p% L* S* F! ~: ^9 ~4 ]8 L
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ _7 t& e; y5 H/ S+ H/ T2 X4 j

% X8 q" `" n7 ]) k# u0 a: j    mcasp->regs->DITCTL     = 0x00000000; // Not used( o4 Y- m( C  z2 e2 i( n8 j7 H
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) o$ p2 ?$ L' {6 E, f# [    mcasp->regs->AMUTE      = 0x00000000; // Not used  t( y9 r# h; _. P  d6 ^. J

( T. q1 N6 D1 Z$ D8 r7 Y/* Starting sections of the McASP*/# D: j' Q2 _7 @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. r3 ^3 R% H& F- H2 @" L" n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 _* s# I# x# F* L, V4 ^" {: S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) Z0 y0 ^9 i6 ?0 A) n5 z6 j& ?" h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 u) A% T: |7 w

, ]0 z4 j7 H7 x2 ]! z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' S8 G; z- o  G* D* l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ L# E5 q" m2 z, S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 {$ I/ S! a8 P" x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" |, `' ?2 o& d; X- V! a+ Y" l+ H1 a- j+ H4 n5 Z# Y! e
    mcasp->regs->XSTAT = 0x0000ffff; 9 }$ G+ x" u, C$ I
    mcasp->regs->RSTAT = 0x0000ffff;
) `5 ^& Z& ~. {4 h: K6 a8 y, R* K- I1 J$ v' X) }: K7 I
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& D( B  r* \* @& E2 U0 N1 }) V  X7 O! F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ~) I2 z! d# ?    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 I9 k2 e9 @% F9 D( w# I& `/ w0 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 m6 ]- b$ V1 R1 A$ w+ d
* [+ r: R0 R- K; g  N    /* Write a 0, so that no underrun occurs after releasing the state machine */2 ~  p! f; a& Q* y
    mcasp->regs->XBUF5 = 0;
. |* q1 q! Z/ _* Y, q  K7 R    mcasp->regs->RBUF0 = 0;
3 E6 h# N$ G# S/ j% C* t4 f2 i9 W: \( H3 q% J
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 u! K+ G$ E3 {1 b- O2 r0 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* ^0 z) Q6 g2 h* _( a- [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) j( i, j, |2 _$ J- W! j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  f# {' y1 C" M2 o2 b! X7 f8 b7 `$ r% R- q+ I' p7 L5 y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" X1 v2 h' o) _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- `: u7 J  j# G1 A2 @  m
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! h+ o2 o1 e8 l3 ?' h, x% x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* V. V' G) G$ Z. K% p: P" i& r4 Z& r+ |* }7 [
    CSR = 0x0000;* U2 ?4 w' D9 L
    INTC_INTMUX1 = 0x3d;
3 Q' o- z0 M9 J) }1 I% z( F    ISTP = (unsigned int)vectors;: N* W1 _9 R; [( S2 K7 X" m: y
    ICR = 0xFFF0;  , ]% i0 g8 F3 O/ T6 U4 e4 h
    IER |= 0x12;  
- b0 @* T+ s% W: L: Q    CSR |= 0x01;  # D6 N+ W2 g( F9 |

+ B7 `3 m3 R* O/ t: D5 e8 }
, l  @+ V+ g% }& L1 O+ o! k
4 k% |3 M0 A% h; [还有就是两个输入输出函数:' v7 u1 _9 M- O! C4 n3 y
void output_sample(Int32 out_data)
; B% Z0 q1 `% Z9 R' s; W6 ?{+ A& V/ ?3 Y5 ?# ?6 l# ~7 z
  AIC31_data.uint = out_data;  
1 P! R2 W) o5 S  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 M& h0 ^7 f* ~' s+ f( v0 F- M1 P4 t
}2 R! H% P+ r& N* r& j' I: H
; }* s+ k& @$ e6 x* j
Int32 input_sample(void)( k- S9 ~' y- H% p6 a: |
{  
, m* s: {1 Z9 p1 F# z  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 D# C0 o" e: }8 N  o, a. _" U' l  return (AIC31_data.uint);+ S9 K, L3 `+ A/ q+ I
}
5 A  z9 ^5 R! r% u
, y9 C. V8 @; N2 s* Q9 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-5 20:55 , Processed in 0.041248 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表