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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 `3 y5 t5 f. }, }0 D: jmain文件:0 {1 j2 E) @; S/ q: p! N. B7 T& W1 l: _
interrupt void interrupt4(void)  
! J" C4 p6 U; r{5 _, Q1 ^' j/ ~5 w" f+ h
  Uint32 sample;
0 f0 l- N: }  u$ A+ _! @- s: g% ~. d* H* n$ n+ k$ U
  sample = input_sample(); // read L + R samples from ADC
1 _" x+ [" F9 W; ~4 }  output_sample(sample);   // write L + R samples to DAC " Y8 W) G) p0 k$ f; {
  return;
, ]2 X, m% y, L; b# p' Z/ _) K  e4 ]}
, k& R5 A$ f, n+ U
4 @" v: l2 h0 J* sint main( void )( ?7 ]6 K) S! ^, M+ g
{
3 Z7 R* D0 `. I, p# i
$ V" V# w4 s9 O; F    /* Initialize BSL */
: X7 s3 U9 a# `$ Q, w    EVMC6747_init( );, O% m3 E) c% N9 L+ |' |
        /* Call evmc6747_intr function */
1 q9 |! r- T6 }4 j    aic3106_init( );
2 t4 W* z1 y' m( t0 [        while(1);
9 T6 K: C( W  s; H+ {}# I) \$ G6 [* N; k% m- }
2 J1 ~, N( x% h; z1 [3 h
; I6 _3 i: }$ ^/ H
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! f9 \  ~. X1 _: ?6 f, m8 c0 a: k/* Initialize MCASP1 */% U6 O+ h" y. C( b5 A+ W
    mcasp = &MCASP_MODULE_1;# O  G/ Q$ e" M5 }1 D
    mcasp->regs->GBLCTL  = 0;       // Reset) h$ M' e( l+ n- t" h
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" \5 I! B' T1 D9 u9 U) T    mcasp->regs->XGBLCTL = 0;       // Reset TX$ S1 B' C$ ~. Z; n/ b
    mcasp->regs->PWRDEMU = 1;       // Free-running: H7 ^$ I5 Z7 t. v) v
   // configure McASP0 receive registers) T4 L: ^6 z9 T7 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% R1 Q4 M" }- N0 J$ r; J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; S/ `* E2 ]9 ^! S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 S( `: k9 L+ `
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% V, H/ f5 N2 }, O& z0 w: r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* D7 [$ Q' a2 M* B; L+ @. ^5 o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( g0 {1 _, \. w  w1 g    mcasp->regs->RINTCTL    = 0x00000000; // Not used, ?+ ?' ^/ E) j  _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: i- {5 V9 z" \! E, A1 L' _
1 {# `' P; Z$ \+ H# z7 L9 ]
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 x# f4 s2 s& q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 `% S1 O9 B4 r6 i    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 ?% r1 d( ]: G2 \    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% V/ M( @; a9 ?/ L# P0 |1 q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 i) u* t: E. A; q7 \3 g* z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 i# {& t0 z; q% O
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 |; C' q. c% A+ F) V3 k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! r$ _8 k' _! ~+ ^1 I  u
7 v6 b: j1 P: R* O" G    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 x( ?) x4 Q* s, l
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' D4 a" c( }* j) E
    mcasp->regs->PFUNC      = 0;          // All MCASPs
( t5 I4 I0 D' f    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! _( s0 t6 [/ |$ X; s1 @6 C6 F+ W- Z- V0 ^( q
    mcasp->regs->DITCTL     = 0x00000000; // Not used& O! z0 J% N/ C* E
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 @, M9 O: B/ O; I$ m8 P7 v, k    mcasp->regs->AMUTE      = 0x00000000; // Not used
& s! z& l! A8 p0 N, o2 I8 j7 y% G! y& G! a3 f& p" E  R. T6 g- e5 t) E
/* Starting sections of the McASP*/
8 L  t7 J+ v3 P/ I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / s8 {6 z. v  K& @7 x% u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& g# |$ U; v( [) [1 U    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) R! s+ T' o+ g( u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 F8 i$ @+ Y" S8 v3 v

" [4 U: e& _( Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / s! b: m' G# t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, f3 s  @3 k! H4 B& L4 e    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( `5 ]  l5 U* p) n4 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% J4 f: ]& [  `" a0 E/ V0 z/ U+ o
    mcasp->regs->XSTAT = 0x0000ffff;
! Z( |( M& r4 j0 @    mcasp->regs->RSTAT = 0x0000ffff; 2 b, H$ \) G) ^  @  ?

, N+ H6 q+ i( ~) L2 r    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- h- _2 g; Q/ h# V0 ?3 q: J7 B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 J6 L( m6 R, G# E2 L' S    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: ]; I6 v- ]* G! M5 J& Z9 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 |( F: n. \9 y# i& u

0 ]" q. P' o2 P' D' G    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 Y' E# S9 c/ x2 u    mcasp->regs->XBUF5 = 0;2 w4 m9 G& \/ c7 }. j! i; U& L
    mcasp->regs->RBUF0 = 0;/ a: m3 e+ L) \% t

* M. \4 e9 N9 H" J% @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( I! ]3 @( [( I) Z, ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( b4 \# Y1 E4 n    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / f- X) o% |" O8 }& V) X# z: ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ o1 w0 j; a) h3 O2 R0 T
8 x- _( g. W+ c$ x    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / S, R# N7 n7 h: s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* l9 k7 \& y5 Z8 [" P: c  Z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' z) ?3 X- Q0 D- H+ n; l- L: y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* Y! K- L/ W0 C
& {% |) d( }. e+ y
    CSR = 0x0000;
: w+ `! O; Y8 h# ^+ _3 L    INTC_INTMUX1 = 0x3d;% b! \. L! O, }1 z# o" L& V
    ISTP = (unsigned int)vectors;
5 G8 w" D3 Q6 o: Y4 J+ i    ICR = 0xFFF0;  - g4 ^3 T" S8 a" w8 W
    IER |= 0x12;  
; J; v. i5 P* e& b7 [5 @8 \1 u    CSR |= 0x01;  
7 U) v; a# [+ E0 ^! G. V- T& ^% f6 T1 ?

) n! _4 A, m: Z2 E7 A5 Z" n6 P) v- `/ X8 Z' q, ~4 x4 g
还有就是两个输入输出函数:
# s2 A( K" f: H) I- ]7 r% ]void output_sample(Int32 out_data)
& D. {# u0 V7 Z; i( ?' q/ `; D{, ?- X1 {+ x+ f6 |( y
  AIC31_data.uint = out_data;  5 K; \+ a$ t9 x7 f" w. g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. ]( ]2 `9 N5 `7 {3 m1 \
}/ Y4 f& A5 _5 w6 }7 g
6 N2 C$ G. ]7 P# R! E7 H
Int32 input_sample(void)/ H- H0 W& t3 R# q; Z
{  5 J8 m! f8 r. T( V
  AIC31_data.uint = MCASP1_RBUF0_32BIT;, e  \% b+ J! ^
  return (AIC31_data.uint);
" b: J, |8 E2 [& v! ]/ J}1 U3 m6 ]) t; X

4 d2 U5 N9 U$ G, x0 ^" E/ W
分享到:  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-3-8 01:07 , Processed in 0.041918 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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