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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, }, J5 x! O& @5 m
main文件:
$ o8 s6 c" c3 E& s% ~interrupt void interrupt4(void)  
6 l# M$ A! _% [' B2 N/ E7 {5 O{
! a0 W  T' m. d* C( d2 N3 }  Uint32 sample;- f) [1 F2 n" S0 t  ]9 k
& E+ d6 S' Y% Y5 {
  sample = input_sample(); // read L + R samples from ADC: C+ a) m- `2 C% H7 z
  output_sample(sample);   // write L + R samples to DAC   Z3 x) X) F; {8 ?
  return;
( [% x% T, M, @# V}
! T- i3 y; z- [( `4 j+ _. `& t3 ^* N  B$ F" G" \+ _! O2 Y
int main( void )+ t/ t" s) J. y' d* L: ]
{$ h! H7 f5 C+ i1 Z

; J$ `2 x% D! ]    /* Initialize BSL */
; T1 Q2 }) q9 P$ ]; C; X    EVMC6747_init( );; f& D! J7 y0 m5 z, f$ d
        /* Call evmc6747_intr function */
2 M+ t% ]6 b; Z7 {2 g) G    aic3106_init( );  c# |) C+ ]  ~0 j: T0 n( t1 A
        while(1);' V# s: y+ f# F, C. b
}) h+ D- s( O4 g4 z7 k+ `4 q- a

# w) d' ?# r0 ~: W+ e4 b- C8 n. o, K
. ~; k) T8 a. I/ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 U9 d5 Z  {) B, R/* Initialize MCASP1 */5 B6 _$ M5 ]2 Y' S9 Y
    mcasp = &MCASP_MODULE_1;& S1 |6 Z/ Z, r
    mcasp->regs->GBLCTL  = 0;       // Reset& Y0 m+ j6 D) D" Q  ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX
, p# B6 Y! R9 k$ N' U8 b    mcasp->regs->XGBLCTL = 0;       // Reset TX4 `1 B7 m5 l1 k6 Q% H0 Z
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ m' D# R2 z" Q& T+ G& w   // configure McASP0 receive registers4 \* l" v: x% X$ {- \% [. j
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# y8 g: d: T' @8 ?, {4 }! n8 E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 s, u2 I( }  a    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 T7 T" ~2 ?9 F: O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ K! F6 D% X9 _( A. d: i! p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 c; l) s' c& G- L, y3 k( a( W& R    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 h) a. M3 m3 U4 {& @    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 J$ Z; c3 [$ k/ k: u  k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ G1 `/ Y  s( l$ l; {* U
: K. O$ ]& J# Y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, g  \7 ~5 H) W" k$ E* G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) s% u+ D  U( V% N3 `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( K! }9 S2 ~2 u- v3 S    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 u3 Z4 b: U1 p) i9 A& t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK7 n, T% A6 T- }) B: V" E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ l8 P6 p& E" k0 o7 m7 J$ y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" M4 o' o$ ~" ?% h( V8 W    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" b8 l8 W  W0 |
( w' H' m. J8 ]1 J; Q5 N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 f, W, F+ Z5 k2 i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ O& c: ]2 h* T+ R* o, U* ]    mcasp->regs->PFUNC      = 0;          // All MCASPs8 I) P; U- X  ?* C  J; H
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. G* t: P$ d4 }9 ~) j- a% D
4 {& I: L9 P* D  C- B
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% z# P, m* h0 M( S7 @8 N5 f( J    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) W* M0 D% q6 b+ W- G. j8 f    mcasp->regs->AMUTE      = 0x00000000; // Not used+ ~9 ?7 u" H3 J$ W- C

, N4 l8 N% l7 Z+ B( m4 }; P* k* F/* Starting sections of the McASP*/
9 P6 {' o  a2 C+ O. O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! a% |* l4 X2 \  [* {9 M9 c7 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % j/ l8 j* {+ P. G- @% t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   F; x5 a: z" q% |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 K3 E; l. J# f8 \' W; X
% A$ R) f- N; f- L& y' ]5 Z1 f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 ^6 q. ?: @- @/ V( _, u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% V4 c. |+ U' w* k    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 a1 Z% U; P; v% t2 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ {4 p( \4 |+ E+ b

8 D  \! H, x8 W! n) V- K9 E  ]( }& s    mcasp->regs->XSTAT = 0x0000ffff; 3 p3 N1 y2 \7 ~% e9 ?9 a
    mcasp->regs->RSTAT = 0x0000ffff;
" H: {$ Y& k  n7 Z# O1 J7 d# A" [
5 F+ n3 D* [/ L" R( z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ V6 ~; L  W$ b- `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& o+ D5 M$ g6 n2 l! S+ C    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 G: K- ^; \( x. J& G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. n" H0 g2 G$ p( P; \0 D
# p+ P& T# R' M" y" _    /* Write a 0, so that no underrun occurs after releasing the state machine */! b9 Q3 Y5 R1 R0 r8 L5 W
    mcasp->regs->XBUF5 = 0;
2 W7 _) _: A- t& h8 |    mcasp->regs->RBUF0 = 0;# x* x' J8 q6 Z6 E/ J" F% u0 E5 }
) u$ O' j' A( Y- o: N7 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - p! H+ X9 r  R7 X+ k" {& P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& k  C  v1 v5 g+ i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 m7 g5 F- W0 v2 J  s' C: V8 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ a4 U. {, ?  _) K' V
& R- ^/ w4 f# l) H. X
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & W( H$ `& z. b% f- D3 Y- O6 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( R9 z! S* k) i+ ]. d& X
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 Z% n- p. A5 ^( y+ O4 q2 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 d! y) Q2 P6 b, ~' A9 o( J  e( J0 p, A5 E& F! D6 q' R- E& Q, O
    CSR = 0x0000;" E8 v# p0 D# o; \/ z" p
    INTC_INTMUX1 = 0x3d;
4 I  d! ~" a' @* k, A# ^    ISTP = (unsigned int)vectors;/ ?& \+ N. F/ b+ l
    ICR = 0xFFF0;  
6 H0 r; t. Q1 B. d  e    IER |= 0x12;  
& b) e1 p; W9 F; F1 H9 P    CSR |= 0x01;  
4 j; J/ K( P7 q6 s$ u; U8 A* ~2 v' L3 r/ ^

' J; O# I: M# o- B/ ]) q% q0 J: Z3 ?# \) R" d% ]# P) A, e
还有就是两个输入输出函数:
6 t! e0 q% {8 U2 {1 }" \" t/ ]void output_sample(Int32 out_data)
% S9 i  M7 G; J7 Y) ^1 ]3 d5 [{
/ t9 ^! w, ^: D# ~' z  AIC31_data.uint = out_data;  
7 U$ ~7 \3 ?5 x: n3 p& d1 b  MCASP1_XBUF5_32BIT = AIC31_data.uint;: B* M5 E9 C" g: S- _/ ?
}. b! p% q* i- x$ ~3 q6 t( r

: J1 h# m; r) U- L" K  f2 ^% Z/ WInt32 input_sample(void)
6 A8 f; Y3 S& h- X1 q$ K; W. l) y{  2 @: A& s1 z; w8 S  M/ {- p8 \# H
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 I$ x* X6 D. H8 ]# \- m. a* C  return (AIC31_data.uint);7 S9 Q0 k/ ^, I# p" z" Y
}# |0 e/ T( Y1 O( D

8 ]! F" D6 ~% L& D) x8 B" K3 Z! W. Q
分享到:  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-4-5 20:33 , Processed in 0.041998 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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